亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中靜態成員函數與靜態成員變量(static )

2020-01-26 14:04:53
字體:
來源:轉載
供稿:網友

C++中靜態成員函數與靜態成員變量(static )

這篇介紹了靜態成員函數與靜態成員變量,是我的讀書筆記,我希望它夠簡短但又比較全面,起到復習的作用。如果有一些C++知識記不清楚了,它可以幫你很快回憶起來。

復習C語言的static關鍵字

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

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

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

當static關鍵字出現在類中

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

(1)靜態成員變量

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

靜態成員同樣受到private,public等的限制。

靜態成員變量的一個典型應用就是用來計數生成的實例的個數。大體思路是設置一個名為num的靜態成員變量并初始化為0,在構造函數中++num,析構函數中--num。這樣num的值就是當前實例的個數。實際上這也帶來了一個隱蔽的bug??聪旅娴拇a:

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

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

(2)靜態成員函數

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

靜態成員變量的初始化

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

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

class CNum {   public:      const static int num;};const int CNum::num = 0; int main() {   CNum n;  return 0;}

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

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

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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲国产视频| 欧美第一淫aaasss性| 中文字幕日韩在线观看| 热门国产精品亚洲第一区在线| 精品久久久久久久久中文字幕| 红桃av永久久久| 亚洲精品影视在线观看| 欧美一级片久久久久久久| 国产精品三级网站| 国产在线观看精品| 久久久久久有精品国产| 911国产网站尤物在线观看| 欧美风情在线观看| 久久精品久久精品亚洲人| 国产成人精品视频在线观看| 久久全球大尺度高清视频| 亚洲人成电影在线| 欧美性猛交xxxx富婆弯腰| 欧美激情一级精品国产| 精品福利樱桃av导航| 久久精品中文字幕免费mv| 久久久综合免费视频| 亚洲xxxx3d| 国产精品久久久久免费a∨大胸| 91精品国产综合久久香蕉的用户体验| 高清欧美性猛交xxxx黑人猛交| 中文字幕亚洲激情| 亚洲人成绝费网站色www| 亚洲美女动态图120秒| 国产亚洲精品久久久| 全球成人中文在线| 国内成人精品视频| 日韩在线观看网址| 欧美成人午夜激情| 国产一区二区动漫| 亚洲精品国产精品久久清纯直播| 66m—66摸成人免费视频| 国产在线播放91| 精品国产一区二区三区久久| 日韩激情第一页| 2018国产精品视频| 91在线无精精品一区二区| 最近2019年好看中文字幕视频| 国产精品第10页| 国产精品成人av性教育| 91久久久久久久久久| 国产亚洲成精品久久| 在线日韩日本国产亚洲| 国产亚洲欧洲黄色| 2021久久精品国产99国产精品| 日韩欧美aⅴ综合网站发布| 日韩av在线免费播放| 国产福利精品视频| 国产玖玖精品视频| 亚洲成人网在线观看| 精品福利樱桃av导航| 国产a级全部精品| 欧美综合第一页| 欧美成aaa人片在线观看蜜臀| 欧美野外wwwxxx| 日韩av毛片网| 日韩在线精品一区| 日韩欧美极品在线观看| 国产suv精品一区二区| 亚洲深夜福利视频| 国产精品视频999| 欧美性69xxxx肥| 91免费看国产| 国产综合在线观看视频| 欧美日韩亚洲激情| 亚洲精品国产综合区久久久久久久| 久久久久久这里只有精品| 最近的2019中文字幕免费一页| 亚洲伊人久久综合| 97不卡在线视频| 成人亚洲激情网| 欧美成人性生活| 欧洲亚洲免费在线| 亚洲国产另类久久精品| 日韩视频免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久在精品线影院精品国产| 久久久久久久爱| 欧美三级免费观看| 国产在线不卡精品| 国产成人精品av| 日本国产欧美一区二区三区| 久久亚洲精品一区二区| 亚洲аv电影天堂网| 成人黄色中文字幕| 91成人在线播放| 亚洲人在线观看| 国产精品视频网址| 亚洲精品一区av在线播放| 最好看的2019的中文字幕视频| 国产精品91免费在线| 中文字幕综合在线| 激情懂色av一区av二区av| 久久手机免费视频| 精品亚洲夜色av98在线观看| 色樱桃影院亚洲精品影院| 亚洲一区二区三区sesese| 久久99精品久久久久久琪琪| 久久激情视频免费观看| 青青草原一区二区| 国产免费一区二区三区在线观看| 日韩大陆欧美高清视频区| 美女少妇精品视频| 亚洲精品久久久久国产| 96精品视频在线| 狠狠色香婷婷久久亚洲精品| 亚洲精品国产精品久久清纯直播| 色妞在线综合亚洲欧美| 国产999精品久久久| 最近2019中文字幕第三页视频| 2020久久国产精品| 色在人av网站天堂精品| 在线亚洲午夜片av大片| 久久这里只有精品视频首页| 亚洲高清在线观看| 国产日韩专区在线| 欧美有码在线观看视频| 在线成人免费网站| 3344国产精品免费看| 国产一区二区三区18| 欧美色欧美亚洲高清在线视频| 亚洲另类xxxx| 91视频国产一区| 最近2019年中文视频免费在线观看| 亚洲午夜精品视频| 久久91超碰青草是什么| 亚洲最大成人网色| 韩国美女主播一区| 日韩在线观看免费网站| 成人亲热视频网站| zzjj国产精品一区二区| 国产美女精品视频| 亚洲成色777777女色窝| 亚洲激情在线观看视频免费| 欧美日韩美女在线观看| 欧美精品少妇videofree| 日韩电视剧在线观看免费网站| 777午夜精品福利在线观看| 久久天天躁狠狠躁夜夜av| 久热爱精品视频线路一| 欧美俄罗斯乱妇| 亚洲欧美一区二区三区四区| 中文字幕少妇一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 一区二区中文字幕| 国产精品久久久久久网站| 欧美丝袜一区二区三区| 午夜精品久久17c| 国产一区私人高清影院| 欧美成人一区二区三区电影| 一本色道久久综合亚洲精品小说| 日韩免费视频在线观看| 中文字幕久久亚洲| 亚洲一区二区三区sesese| 日韩av理论片| 欧美大片第1页| 日韩福利视频在线观看| 久久久久九九九九| 91精品国产自产在线观看永久|