【C++】類中靜態成員的宣告、初始化
阿新 • • 發佈:2018-12-07
【C++】類中靜態成員的宣告、初始化
有參考大佬 零點零一 的文章: https://blog.csdn.net/thanklife/article/details/78476737
類中靜態成員的宣告
類中的靜態資料成員是區域性靜態變數,類中的資料成員被宣告為靜態的之後,其儲存位置從原來的棧中存放改為靜態儲存區。但是區域性靜態變數在離開作用域之後,並沒有被銷燬,而是仍然駐留在記憶體當中,直到程式結束,只不過我們不能再對他進行訪問。
class Staff { private: static int count; }
初始化
類的靜態資料成員只能在類外進行初始化,因為靜態變數是公共的,不依賴於某個物件,是獨立的。
初始化方式如下:
int Staff::count = 0;
靜態資料成員值的改變
如上的例子中,count記錄的為員工數,可以在建構函式中讓count自增1:
class Staff
{
private:
static int count;
public:
Staff()
{ count++; }
}
這樣,在每宣告一個物件,count的值就+1,就達到了統計員工數的功能。
完整例子
編譯環境:Visual Studio 2017.
原始碼:
#include <iostream> #include <string> #include <Windows.h> using namespace std; int t = 1; class Staff { protected: int code; string name; static int count; public: Staff(string n) //有問題 { name = n; code = t++; count++; } void SetName(string n) { name = n; } string GetName() { return name; } int GetCode() { return code; } int static GetStaffCount() { return count; } }; int Staff::count = 0; class Teacher :virtual public Staff { protected: string subject; public: Teacher(string n, string s) :Staff(n), subject(s) {} void SetSubject(string s) { subject = s; } string GetSubject() { return subject; } }; class Officer :virtual public Staff { protected: string work; public: Officer(string n, string w) :Staff(n), work(w) {} void SetWork(string w) { work = w; } string GetWork() { return work; } }; class Teacher_Officer :public Teacher, public Officer { public: Teacher_Officer(string n, string s, string w) :Staff(n), Teacher(n, s), Officer(n, w) {} }; int main() { Teacher t1("孔子", "儒家文學"); //建立教學類員工t1 Teacher t2("公輸班", "建築學"); Officer o1("端木賜", "財務科長"); //建立教輔類員工o1 Teacher_Officer to3("顏回", "儒家文學", "副院長");//建立教師教輔類員工to3 cout << "共有教職工" << Staff::GetStaffCount() << "人" << endl; cout << t1.GetCode() << ", " << t1.GetName() << ", " << t1.GetSubject() << endl; cout << t2.GetCode() << ", " << t2.GetName() << ", " << t2.GetSubject() << endl; cout << o1.GetCode() << ", " << o1.GetName() << ", " << o1.GetWork() << endl; cout << to3.GetCode() << ", " << to3.GetName() << ", " << to3.GetSubject() << ", " << to3.GetWork() << endl; system("pause"); return 0; }
輸出結果:
共有教職工4人
1, 孔子, 儒家文學
2, 公輸班, 建築學
3, 端木賜, 財務科長
4, 顏回, 儒家文學, 副院長
請按任意鍵繼續. . .