靜态成員
- 類成員一旦被 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);
}