静态成员
一.属于类而非对象
•静态成员变量不包含在对象实例中,具有进程级的生命周期
•静态成员函数没有this指针,也没有常属性
•静态成员依然受类作用域和访问控制限定符的约束
二外部定义和初始化
•静态成员变量的定义和初始化,只能在类的外部而不能在构造函数中进行
–class Account
{
public:
static double s_interest;
};
–double Account::s_interest = 0.001;
二.通过类或对象访问
•访问静态成员,既可以通过类也可以通过对象
–Account acc (...), pacc = &acc;
acc.s_interest = 0.002;
pacc->s_interest = 0.003;
Account::s_interest = 0.004;
三.对象共享
•静态成员变量为该类的所有对象实例所共享
–Account acc1 (...), acc2 (...), acc3 (...);
acc1. s_interest += 0.001;
cout << Account::s_interest << endl; // 0.002
acc2. s_interest += 0.002;
cout << Account::s_interest << endl; // 0.004
acc3. s_interest += 0.003;
cout << Account::s_interest << endl; // 0.007
Account::s_interest -= 0.004;
cout << acc1.s_interest << endl; // 0.003
cout << acc2.s_interest << endl; // 0.003
cout << acc3.s_interest << endl; // 0.003
四.静静非静静非静
•静态成员函数只能访问静态成员变量或调用静态成员函数
•非静态成员函数既可以访问静态成员变量或调用静态成员函数,也可以访问非静态成员变量或调用非静态成员函数
五.具有成员访问性的全局标识符
•事实上,类的静态成员变量和静态成员函数,更象是普通的全局变量和全局函数,
只是多了一层类作用域和访问控制属性的限制,相当于具有成员访问性的全局变量和全局函数
•类的静态成员变量通常用于表示需要在该类的多个实例化对象间共享的属性,如银行账户的利率
•类的静态成员函数一方面可以独立于对象充当静态成员变量的访问接口,另一方面它也可以在不破坏封装性的前提下,让一个类有能力管理自己的对象