1. 程式人生 > >c++中類的private的static變數實現類物件的資料共享

c++中類的private的static變數實現類物件的資料共享

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