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
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