静态成员
-
类成员一旦被 static 修饰就会变成静态成员,他不会存储在每一个对象当中,而是单独一份存储在bss或data内存段中,所有的类对象共享(静态成员属于类,而不属于某个对象)
-
静态成员需要在类内声明,但要在类外定义和初始化,与成员函数一样需要加"类名::"限定符表示它属于那个类,但不需要再加额外的 static。
-
成员函数前也可以被 static 修饰,这种函数叫静态成员函数,静态成员函数没有 this 指针,因此在静态函数中不能直接访问类的成员及成员函数,但可以直接访问静态成员变量,和静态成员函数。
-
静态成员变量、函数依然受访问控制限定符的影响
-
因为在代码编译完成后静态成员已经定义完成(有了自己的存储空间),因此可以不通过类对象而直接调用,"类名::静态成员名"直接调用。
-
普通成员函数可以直接访问静态成员变量、静态成员函数。
-
静态成员变量可以当作全局变量来使用(访问限定符必须是public),而静态成员函数可以当作是一个类的接口,实现对类的管理
#include <iostream>
#include <string.h>
using namespace std;
class User
{
char pass[20];
public:
static char name[20]; // 只是声明
User(const char* name,const char* pass)
{
strcpy(this->name,name);
strcpy(this->pass,pass);
}
static void show(void)
{
//cout << name << " " << pass << endl;
}
static void func(User user)
{
show();
cout << name << " " << user.pass << endl;
}
};
char User::name[20];
int main()
{
User user("zhizhen","zzxx");
strcpy(User::name,"00000");
/*user.show();
User user1("hehe","xxxxx");
user.show();*/
User::func(user);
}