?靜態數據成員
類是類型而不是詳細的數據對象,類的對象都是該類的實例,每一個類對象都具有自己的數據成員,并且是相互獨立,各占內存空間。然而,程序中往往須要讓類的全部對象在類的范圍內共享某個數據。聲明為static的類成員可以在類的范圍中共享,稱之為靜態成員。
一、全局變量與靜態數據成員
????希望在同類的多個對象之間實現數據共享,能夠用靜態的數據成員實現。
使用靜態數據成員不會破壞隱藏的原則,即保證了安全性。
?
二、靜態數據成員特點?
在每一個類中僅僅有一個拷貝,由該類的全部對象共同維護和使用靜態數據成員的值對每一個對象都是一樣,但它的值是能夠更新的。僅僅要對靜態數據成員的值更新一次,保證全部對象存取更新后有同樣的值。
三、靜態數據成員的定義及初始化格式
???????static???類型標識符???靜態數據成員名;??//定義
???????類型標識符???類名::?靜態數據成員名?=??初始值;//初始化
說明:
(1)靜態數據成員屬于類全部的對象共同擁有,占一份內存空間。
(2)靜態數據成員是靜態存儲的,它是靜態生存期。它在程序開始編譯時就分配空間,而不是某個對象創建時分配的。也不隨對象的撤銷而釋放,而是程序結束才釋放空間。?
(3)初始化在類體外進行,并且前面不加static,以免與一般靜態變量相混淆。
(4)初始化時不加該成員的訪問權限修飾符private,public等。
(5)初始化時使用作用域運算符來標明它所屬類,因此,靜態數據成員是類的成員,而不是對象的成員。
四、靜態數據成員的訪問
???????類名?::?靜態數據成員名
Code:
類內.h定義:static?int?noofStds;?//靜態數據成員
.cpp中初始化:
int?CStudent::noofStds?=?0;? ??//靜態數據成員初始化
類內函數可直接引用,類外的普通函數引用時受訪問權限的限制,訪問方式為:??CStudent::noofStds?=?x;
靜態成員函數
靜態成員函數和靜態數據成員一樣,它們都屬于類的靜態成員,它們都不是對象成員。
一、靜態成員函數的定義格式
??????static???函數類型???靜態成員函數名?(?參數表?);?
??????靜態成員函數是在成員函數聲明的前面加上keywordstatic。
二、調用靜態成員函數使用例如以下格式
?????類名?::?靜態成員函數名?(?參數表?);
三、靜態成員函數的特點
????(1)?對于公有的靜態成員函數,能夠通過類名或對象名來調用,而一般的非靜態成員函數僅僅能通過對象名來調用。靜態成員函數能夠由類名通過符號“::”直接調用。
???(2)靜態成員函數能夠直接訪問該類的靜態數據成員和靜態成員函數,不能直接問非靜態數據成員和非靜態成員函數。假設靜態成員函數中要引用非靜態成員時,可通過對象來引用。
Code2:
Cmystring為一個類,set_total_len為當中的靜態成員函數,total_len為靜態數據成員,len為普通成員。
方法一:通過傳遞對象的引用來確定非靜態成員屬于哪個類對象。
static?int?set_total_len( Cmystring?str )
{
?????total_len+=?str.len;
?????return?total_len;
}
調用時:
?????Cmystring?str1("this?is?the?first?string");??//
?????cout<<str1.set_total_len(str1)<<“\n”;?//或????
?????cout<<Cmystring::set_total_len(str1)<<”\n”;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
