C++里的静态成员
首先理解C++中静态成员有何作用?它的特点?
1)静态数据成员:
定义格式:static 数据类型 数据成员名 这个与普通数据成员相似,记得加static 就好了。因为它属于类,而不是属于某个对象。所以可以用类名直接访问静态的数据成员!!!
访问格式: 类名::静态数据成员名
但私有静态数据成员不能在类外直接访问,如下图。主要看报错
定义:
另外每个静态数据成员在类里面只有一个拷贝,所以在任何时候访问任何一个类的对象,都会得到最新的静态数据成员的值。在任意一个对象中修改静态数据成员的值,都会影响到该类的所有对象。也就是这样实现了一个类的多个数据共享,并同步更新 。其在类中定义 ,在类外初始化。初始化格式: 数据类型 类名::变量名=值
2)静态成员函数:
-
在类的定义中,前面有static说明的成员函数称为静态成员函数,静态成员函数属于整个类,是该类中的共享的成员函数,不属于某个对象。
-
静态函数成员主要用来访问静态数据成员,与静态数据成员一起使用时,达到了对同一个类中对象之间共享数据的目的。
-
私有的静态成员函数不能做类外部的函数和对象访问。
-
静态成员函数可以在建立对象之前调用。
-
静态成员函数被限定为内部连接,与其他同名函数不会冲突。
-
静态成员函数没有this指针。静态成员函数可以访问本类中的静态数据成员。
一个小栗子
下面举一个完整的栗子,希望能够更好地理解关于静态成员的访问、初始化得问题。
并且看看静态数据成员是否受private控制符的作用。
#include <iostream>
using namespace std;
class Member
{
public:
Member() {};
void print();
static int pub;
private:
static int priv;
};
int Member::pub = 1;
int Member::priv = 2;
void Member::print()
{
cout << "print() pub = " << pub << endl;
cout << "print() priv = " << priv<< endl;
}
int main()
{
Member m;
m.print();//pub,priv均没有在类的外部访问
Member::pub = 11;
cout << "main() pub=" << m.pub << endl;
return 0;
}
所以,private还是有作用的。
结合第一张图,正是在受到了private的控制下,变量“priv”不能在类外被访问。