欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++中如何實現(xiàn)靜態(tài)成員函數(shù)與靜態(tài)成員變量

本篇內(nèi)容主要講解“C++中如何實現(xiàn)靜態(tài)成員函數(shù)與靜態(tài)成員變量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++中如何實現(xiàn)靜態(tài)成員函數(shù)與靜態(tài)成員變量”吧!

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,彭州企業(yè)網(wǎng)站建設,彭州品牌網(wǎng)站建設,網(wǎng)站定制,彭州網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,彭州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

復習C語言的static關鍵字

(1)加在局部變量的前面使之成為靜態(tài)局部變量,作用域還是在函數(shù)內(nèi)部,可是生存周期延長了。

(2)加在全局變量的前面限定該變量作用域為文件作用域,就是說即使其他文件使用了extern擴展作用域也不行。這在C語言的多人項目中非常有用,避免了變量的重名。然而在C++中這一功能已經(jīng)被命名空間取代,但是為了保持和C語言的兼容,static還是有這樣的功能。

(3)加在函數(shù)定義或聲明的前面,限定函數(shù)作用域到文件作用域,也是為了避免多個文件中有重名函數(shù)。

當static關鍵字出現(xiàn)在類中

當static出現(xiàn)在類的定義中便出現(xiàn)了靜態(tài)成員變量和靜態(tài)成員函數(shù)。靜態(tài)成員是屬于類的,而不是屬于某個對象的。即便沒有任何一個實例,類的靜態(tài)成員變量也已經(jīng)存在了,而且還可能通過“類名::成員名”進行訪問。類的靜態(tài)成員函數(shù)也可以用相同的方式調(diào)用,在類產(chǎn)生實例之前就調(diào)用成員方法,典型應用是實現(xiàn)單例模式。

(1)靜態(tài)成員變量

靜態(tài)成員變量本質(zhì)上是全局變量,但是將和某些類關系緊密的全局變量寫到類里面,形式上成為一個整體,更容易理解和維護。所以盡量使用靜態(tài)成員變量吧,減少全局變量的使用。普通成員變量每個對象都有各自的一份,但是靜態(tài)成員變量一共只有一份,被所有的本類對象共享。如果使用sizeof運算符計算對象的大小,得到的結果是不包含靜態(tài)成員變量在內(nèi)的。

靜態(tài)成員同樣受到private,public等的限制。

靜態(tài)成員變量的一個典型應用就是用來計數(shù)生成的實例的個數(shù)。大體思路是設置一個名為num的靜態(tài)成員變量并初始化為0,在構造函數(shù)中++num,析構函數(shù)中--num。這樣num的值就是當前實例的個數(shù)。實際上這也帶來了一個隱蔽的bug。看下面的代碼:

class CNum {
   public:
       static int num;
       ~CNum() { --num; }
       CNum() { ++num; }
};

int CNum::num = 0;
void fun(CNum n){ }

 int main() {
   CNum n;
   fun(n);
   fun(n);
   cout << CNum::num << endl;
  return 0;
}

結果:-1

num盡然成了一個負數(shù),難道析構函數(shù)比構造函數(shù)多調(diào)用了一次?實際上不是的。當執(zhí)行 fun(n); 語句時調(diào)用了復制構造函數(shù),這個函數(shù)因為我們沒有給出實現(xiàn),所以是用的編譯器默認提供的版本,在這個構造函數(shù)中并沒有++num這條語句,因此少計數(shù)了兩次(兩次調(diào)用fun(n))。

解決的方法就是一定要提供自己寫的復制構造函數(shù)并在函數(shù)體中加入 ++num;

(2)靜態(tài)成員函數(shù)

靜態(tài)成員函數(shù)內(nèi)部不能調(diào)用非靜態(tài)成員函數(shù),原因是,非靜態(tài)成員函數(shù)需要傳入一個this指針,這讓靜態(tài)成員函數(shù)很為難,它并不知道與之相關的信息,也就無法提供this指針。

靜態(tài)成員變量的初始化

上面代碼中的第8行  int CNum::num = 0; 是靜態(tài)成員變量的初始化。這可以視為是靜態(tài)變量的定義(定義的同時初始化,即便不初始化也需要這個定義),而把類內(nèi)的 static int num; 視為一個聲明,這樣的理解可以突出這樣一個事實:靜態(tài)成員變量本質(zhì)上是全局變量。注意在類外定義時加上“類名::”。

對于常量成員變量,我們知道初始化時一定要使用初始化列表,那么當一個變量既是常量又是靜態(tài)成員時(同時被const和static修飾)要怎么樣初始化呢?是像一般的靜態(tài)成員變量一樣在類外定義并初始化,還是像一般的常量成員變量一樣使用初始化列表呢?答案時前者,即在類外定義并初始化,在類內(nèi)聲明,就像下面那樣:

class CNum {
   public:
      const static int num;
};

const int CNum::num = 0;

 int main() {
   CNum n;
  return 0;
}

實際上,完全可以把const int 視為一種數(shù)據(jù)類型,它的地位和int一樣。這樣理解是有好處的,比如從const int到int需要強制類型轉(zhuǎn)換,把他們看成兩種類型,這就自然而然。相應的const char 和char 也應該看成兩種類型,就好像它們完全沒有什么特殊的關系一樣。

另外static const int類型和static const char 類型可以在類內(nèi)直接初始化,就是說都不需要在類外再次定義,像下面這樣:

class CNum {
   public:
     const static int a = 19;
};


 int main() { 8   cout << CNum::a << endl;    //輸出19
  return 0;
}

到此,相信大家對“C++中如何實現(xiàn)靜態(tài)成員函數(shù)與靜態(tài)成員變量”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

本文題目:C++中如何實現(xiàn)靜態(tài)成員函數(shù)與靜態(tài)成員變量
文章出自:http://aaarwkj.com/article46/gpjchg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、微信公眾號、定制開發(fā)網(wǎng)站維護、小程序開發(fā)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管
日韩黄国产一区二区三| 狼人综合狼人综合网站| 日日添夜夜躁欧美一区二区| 一欧美一区二区三区| 国产男女爱猛视频在线| 日本亚洲中文字幕网站| 人人妻人人澡人人揉| 国产蜜臀视频在线播放| 免费中文字幕av电影| 午夜日韩综合激情视频在线观看| 人妻有码一区二区三区| 91国产在线视频免费观看| 亚洲综合一区二区三区四区在线| 18禁视频免费无遮挡| 亚洲精品久久麻豆蜜桃| 欧洲一区二区在线激情| 国产精品白浆大屁股一区二区三| 亚洲欧美成人免费视频| 熟女一区二区三区免费视频| 亚洲精品成人综合色在线| 亚洲毛片免费视频久久| 亚洲av永久精品桃色| 亚洲三级黄片免费播放| 看看美女阴逼毛茸茸的| 日日夜夜久久一二三区| 一区二区三区免费视频少妇| 一本色桃子精品久久中文字幕| 国产福利成人一区二区| 免费直接在线看亚洲黄色| 国产三级黄色大片在线免费看| 大神厕所偷拍美女尿尿| 亚洲性图中文字幕在线| 欧美日韩亚洲一区二区搜索| 亚洲中文字幕伦理在线| 中文字幕制服国产精品| 免费av男人天堂亚洲天堂| 欧美日韩中文字幕精品视频| 日本人免费一区二区电影| 欧美特黄高清在线观看| 欧美精品一区二区三区狠狠| 亚洲淫婷婷久久一区二区|