静态成员变量:
- 在类里用static对变量定义,缺省时初始化为0,不能在类中初始化,因为static变量在类实例化之前就已经存在。
- 在类外用
<数据类型><类名>::<静态数据成员名>=<值>
进行初始化,记住不用加static,这是为了和普通的static变量区分。
静态成员函数:
-
类的静态成员函数不能调用非静态成员函数
原因:因为类的静态成员函数在未实例化对象之前类加载的时候就已经分配空间,而非静态成员函数在实例化对象之后才分配空间,所以类的静态成员函数不能调用非静态成员函数。
-
类和对象都可以调用静态成员函数,但是静态成员函数无this指针,所以本质上都是通过
::
调用原因:因为静态成员函数是属于类的, 所以类和对象都可以调用。
-
非静态成员函数如果内部没有非静态成员,是可以通过类名调用的,否则只能通过对象调用。
-
非静态成员函数可以调用类的静态成员函数和直接访问静态成员变量
原因:因为调用非静态成员函数时之前静态成员函数已经分配空间,故可以调用。静态成员变量同理。
-
静态成员函数不能直接访问非静态成员变量,但可以通过对象来访问。而对静态成员变量,可以直接访问无需加
<类名>::
。