Função estática em C++

Jinku Hu 12 outubro 2023
Função estática em C++

Este artigo demonstrará como usar funções de membro estático da classe em C++.

Use as funções de membro estáticas para acessar as variáveis ​​de membro private estáticas

A palavra-chave static pode ser usada em C++ para declarar membros da classe associada à própria classe em vez de qualquer instância particular.

As variáveis ​​de membro estático são declaradas dentro do corpo da classe, mas não podem ser inicializadas ao mesmo tempo, a menos que sejam tipos integrais qualificados constexpr, const ou enum qualificados const. Portanto, precisamos inicializar membros estáticos não constantes fora da definição de classe, como faríamos com qualquer outra variável global.

Observe que, mesmo se o membro estático fornecido tiver um especificador private, ele pode ser acessado no escopo global usando o operador de resolução de escopo de classe, pois BankAccount::rate é inicializado no seguinte trecho de código. Uma vez que o membro rate é inicializado no início do programa, ele permanece ativo até que o programa termine. Se o usuário não inicializar explicitamente os membros estáticos, o compilador usará o inicializador padrão.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class BankAccount {
 private:
  //    static double rate = 2.2; / Error
  static double rate;
  double amount;

 public:
  explicit BankAccount(double n) : amount(n) {}
  static double getRate() { return rate; }
  static void setNewRate(double n) { rate = n; }
};

double BankAccount::rate = 2.2;

int main() {
  BankAccount m1(2390.32);
  BankAccount m2(1210.51);

  return EXIT_SUCCESS;
}

BankAccount::rate não é armazenado em todos os objetos BankAccount. Existe apenas um valor de rate associado à classe BankAccount e, conseqüentemente, todas as instâncias acessarão o mesmo valor em um determinado momento. Este comportamento é muito útil no design de classes, mas, neste caso, vamos nos concentrar nas funções-membro estáticas.

Os últimos são geralmente usados ​​para acessar variáveis ​​de membro estático, pois os especificadores de controle de acesso de membro se aplicam quando os usuários da classe desejam interagir com eles.

Ou seja, se quisermos recuperar o valor da rate que tem um especificador private, precisamos ter uma função de membro public correspondente. Além disso, não queremos acessar esses membros com objetos de chamadas individuais, pois há apenas um valor para a própria classe.

Portanto, implementamos uma função chamada getRate, uma função de membro estática e retorna o valor de rate. Então podemos acessar o valor de rate diretamente da função main sem construir um objeto do tipo BankAccount. Observe que as funções de membro estático não têm this ponteiro implícito disponível e não podem acessar / modificar membros não estáticos da classe.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class BankAccount {
 private:
  static double rate;
  double amount;

 public:
  explicit BankAccount(double n) : amount(n) {}
  static double getRate() { return rate; }
  static void setNewRate(double n) { rate = n; }
};

double BankAccount::rate = 2.2;

int main() {
  cout << BankAccount::getRate() << endl;
  BankAccount::setNewRate(2.4);
  cout << BankAccount::getRate() << endl;

  return EXIT_SUCCESS;
}

Produção:

2.2
2.4
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Static