天天看點

從零開始的C++(靜态成員)

靜态成員

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

繼續閱讀