在类型前面加static修饰的数据成员,是隶属于类的,成为类的静态数据成员,也称为“类的变量”
静态数据成员被该类的所有对象共享(即所有对象中的这个数据域实际上处于同一个内存位置)
静态数据要在实现文件中赋初值,格式为:
Type ClassName::static_var = Value;
返回值类型前面加static修饰的成员函数,称为静态成员函数,它们不能调用非静态成员函数;
类的静态成员(数据,函数)既可以通过对象来访问,也可以通过类名字类访问;
#include <iostream> using namespace std; class Test { static int count; public: Test() { count++; } ~Test() { count--; } static int how_many() { return count; } }; int Test::count = 0; void print(Test t) { cout << "tests:" << t.how_many() << endl; } int main() { Test t1; cout << "test#" << Test::how_many() << endl; Test t2 = t1; cout << "test#" << Test::how_many() << endl; print(t2); cout << "test#" << t1.how_many() << "," << t2.how_many() << endl;
return 0; }
类中的常量成员
使用const修饰的数据成员,称为类的常量数据成员,在对象的整个生命周期内不可以更改;
常量数据成员只能在构造函数的初始化列表中被设置,不允许在函数中通过赋值来设置;
若用const修饰成员函数,则该成员函数在实现时不能修改类的数据成员, 即函数体中不能有改变对象状态的语句;
若对象被定义为常量,则它只能调用以const修饰的成员函数,其他成员函数不允许调用;
怕什么真理无穷,进一寸有一寸的欢喜。---胡适