2015-10-14 56 views
-1

這是我的頭文件,但我不明白靜態數據成員的功能,如果我聲明它們是私有的或公共的輸出保持不變。靜態數據成員如何工作。關於靜態數據成員。

class cDate   

{ 

private: 

int day;  
int month; 
int year; 
bool valid; 
bool validate(); 
bool IsLeapYear() const; 
**static char strMON[12][4]; 
static char strMONTH[12][10];** 

public: 

cDate(int d = 1, int m = 1, int y = 2000); 
cDate(cDate & src); 
~cDate(); 
void print(int option) const; 
void ReadFromKB(); 


void setDay(int d); 
void setMonth(int m); 
void setYear(int y); 
void setDate(int d, int m, int y); 


int getDay() const; 
int getMonth() const; 
int getYear() const; 
}; 
+0

一些指導:使用'std :: vector'而不是原始數組和指針;使用'std :: string'而不是'char'數組;考慮更改命名約定,以便客戶端代碼很好地讀取(僅使用'day()')而不是很好地讀取的實現代碼。 –

+0

對於不起作用的代碼,請提供一個完整但很小的例子,讀者可以嘗試。 –

+1

@Noman你是否嘗試過使用'cDate'的多個實例? – LogicStuff

回答

0

靜態數據是類變量不是實例變量,它沒有任何關係與修飾

例如

class ABC { 
static int a; 
int b; 
} 

現在創建A級兩個對象,並指定值

ABC a1 =新ABC(); ABC b1 = new ABC();

所以在這種情況下,a1和b1都具有相同的'a'副本,因爲它屬於類並且可共享,因此a1到'a'變量的任何更改都會反映b1對象中的更改,也反之亦然。

+0

表示如果我將它們聲明爲公共或可能是私人的,則不起作用。因爲靜態數據是類變量,所以類的所有成員都可以訪問它們,或者對於所有對象都有相同的副本。 – Noman

+0

@Noman - 對於不屬於ABC對象的任何代碼,仍然存在對公共或私人......進行聲明的「效果」。 –

0

當您將類的數據成員聲明爲靜態時,這意味着無論創建了多少個對象,都只有一個靜態成員副本。它將由班級的所有對象共享。