c++中類的private的static變數實現類物件的資料共享
阿新 • • 發佈:2018-11-22
C++中使用靜態成員可以實現同一類的不同物件之間共享資料 j。類的普通資料成員在類的每一個物件都有一個拷貝,就是說每個物件的同名數據成員可以分別儲存不同數值,這就保證物件擁有自身區別其他物件的特徵的需要。靜態資料成員是類的資料成員的一種特例,採用static關鍵字來宣告;每個類只有一個拷貝,由該類的所有物件共同維護和使用,從而實現了同一類的不同物件之間的資料共享。
例如:
#include <iostream> using namespace std; class sample { private: static char m_sArray[10]; public: sample(){ cout << "default constructor! "<< endl;} sample(sample & s){ cout <<"copy constructor! " << endl;} void show(void) { cout << m_sArray << endl;} void input(void) { cin.get(m_sArray, 10);} }; char sample::m_sArray[10] = "I am a engineer"; int main(void) { sample e1; e1.show(); sample e2(e1); e2.show(); e2.input(); e1.show(); }
執行結果如下:
default constructor!
I am a engineer
copy constructor!
I am a engineer
this is my job
this is my job
靜態成員變數m_sArray確實起到了在不同物件間共享的作用!不過由於其是靜態屬性,記憶體是在全域性/靜態區域開闢的,屬於棧記憶體區,記憶體大小使用受限。如果能動態從堆中申請記憶體,則可以使用大記憶體空間了。
有一學生類:
class engineer { Private: im ID : char nalne; static count;//靜態資料成員,用來存放“人數” string name; }
如果程式中需要統計學生人數,這個資料存放在什麼地方呢?若以類外的全域性變數來存放,不能實現資料的隱藏,若在類中增加一個數據成員用以存放人數,必然在每一個物件中都儲存一副本,這樣不僅冗餘,而且每個物件分別維護一個“人數”,勢必造成資料的不一致性。因此,比較好的方案是在engineer類中增加一個靜態資料成員。static count用來存放學生“人數”。
原文:https://blog.csdn.net/fanyun_01/article/details/78145431?utm_source=copy