static
MembersWe say a member is associated with the class by adding the keyword static
to its declaration. Like any other member, static
members can be public
or private
. The type of a static
data member can be const
, reference, array, class type, and so forth.
As an example, we’ll define a class to represent an account record at a bank:
class Account {
public:
void calculate() { amount += amount * interestRate; }
static double rate() { return interestRate; }
static void rate(double);
private:
std::string owner;
double amount;
static double interestRate;
static double initRate();
};
The static
members of a class exist outside any object. Objects do not contain data associated with static
data members. Thus, each Account
object will contain two data members—owner
and amount
. There is only one interestRate
object that will be shared by all the Account
objects.
Similarly, static
member functions are not bound to any object; they do not have a this
pointer. As a result, static
member functions may not be declared as const
, and we may not refer to this
in the body of a static
member. This restriction applies both to explicit uses of this
and to implicit uses of this
by calling a nonstatic
member.