999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C++中靜態成員應用方法的探討

2021-09-23 04:29:01張藝濤沈木子方歡
電腦知識與技術 2021年24期
關鍵詞:語言

張藝濤 沈木子 方歡

摘要:針對C++中靜態數據成員在多文件編譯環境中存在的問題,該文深入分析了 C++語言中類靜態數據成員的聲明和訪問方法,定位利用全局變量來實現多文件編譯的弊端,利用extern關鍵字修飾變量來實現多文件編譯的思路,并詳細闡述多文件編譯中extern的用法,并舉了相應的例子來進行例證。

關鍵詞:C++語言;靜態成員;static;extern;多文件編譯

1 引言

靜態數據成員用static修飾的數據成員具有靜態生存期,可供函數來調用該全局變量完成一定需要,可應用局部變量或應用于類中的成員變量。static修飾全局變量,局部變量,函數,作用范圍在同一文件內。extern修飾變量的聲明以及函數的聲明,作用范圍在本文件及多文件范圍。兩者的聲明、定義、存儲卻是不同的。

一個類中聲明一個私有數據成員并以static修飾,在類外使用類名限定對該成員進行定義和初始化,實現該變量具有靜態生存期,以及static修飾函數成員。在多文件編譯下,類中staitc修飾的變量,編譯器是無法識別。針對這一問題,本文提出使用extern關鍵字,用于靜態數據成員的多文件編譯,并對靜態數據成員的定義和調用等問題進行了總結。

2 存在的問題

以一段程序關于點位置的移動來說明,如圖1所示,采用多文件方法將原本的程序分為三部分,其中Point.h文件中聲明一個類,以及類中的無參、有參構造函數、拷貝構造函數、析構函數、普通函數和一些數據成員;這些類的成員函數在Point.cpp中進行定義和初始化,其中static修飾的類中變量,用類名限制并進行初始化。在static修飾的數據成員用于多文件時,在編譯過程中會出現各種錯誤如圖2所示。

3 問題探索

從圖2可以看出,編譯該段代碼過程中,在Point.cpp文件中出現各種錯誤,在確定代碼準確無誤的情況下,發現問題可能在static修飾的函數以及數據成員。原程序中的static修飾的count去除,僅剩static修飾的函數,編譯代碼并運行,代碼運行正常。

問題轉向static修飾的私有變量。

類的靜態成員在類定義之外再加以定義,編譯器是否無法找到為它們專門分配的空間呢?在類中直接對其賦值并以const進行修飾。const修飾的量是常量,無法對其再賦值,將該代碼所有有關count的代碼都刪去,在另一編譯文件引用count,并輸出該值。代碼如下:

在圖5中Point類中聲明一個extern變量,會發現編譯出現問題count的指定存儲類別,說明當聲明一個類的時候并無extern變量的存儲空間,而在源文件中對于extern只是聲明,編譯器沒有實際意義上的賦予存儲空間,只有在定義后,編譯器在此標記存儲空間在執行時加載內并初始化,間接說明extern修飾的變量無法在類中使用。extern可以置于變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時,在其他模塊中尋找在其定義全局變量在外部使用聲明時,extern關鍵字是必須的,如果變量沒有extern修飾且沒有顯式的初始化,同樣成為變量的定義,因此此時必須加extern,而編譯器在此標記存儲空間在執行時加載內并初始化為0。而局部變量的聲明不能有extern的修飾,且局部變量在運行時才在堆棧部分分配內存。全局變量或函數本質上講沒有區別,函數名是指向函數二進制塊開頭處的指針。而全局變量是在函數外部聲明的變量。函數名也在函數外,因此函數也是全局的。聲明可以是多次,但是定義只能是一次,否則編譯器會出錯。extern int i;為聲明,不是定義。int;既是聲明也是義。使用externa 來聲明一個數組時,extern char p[];定義于 .h文件.當用指針extern char *p;聲明在.h文件中是錯誤的。將會導致系統崩潰。p在這里被聲明為extern char* p ,而它原來的定義卻char p[10].這種情況,當用p[i]這種形式提取這個聲明的內容時,實際上得到的是一個字符。但按照上面的方法,編譯器卻把它當成是一個指針,把ASCII字符解釋成為地址顯然出錯,如果此時程序無意義,不會污染空間內容。否則,會污染程序地址空間的內容,并出現莫名其妙的錯誤。

5 總結

對比static以及extern關鍵字,闡明兩者相同與區別,同時發現static關鍵字在多文件編譯單元的弊端,使用關鍵字extern解決多文件編譯問題,最后總結extern用法。此次實驗不僅是static以及extern的用法說明,更是在代碼繁多情況下,多文件來編譯使編寫代碼區塊分工明確。當代碼的內容變得復雜,既不會使程序員混淆,同時也能更好地完成任務。

參考文獻:

[1] 趙娟.C++語言中共享機制的實現[J].電腦知識與技術,2019,15(4):212-213.

[2] 張永,方安仁,劉治生.C++語言中靜態數據成員的研究[J].陜西理工學院學報:自然科學版,2005,21(4):22-24.

[3] 聶豐英.淺談靜態成員在C++中的應用[J].硅谷, 2008(17):27-27.

[4] 鄭莉.C++語言程序設計[M].4版.北京:清華大學出版社,2012.

【通聯編輯:王力】

猜你喜歡
語言
詩之新,以語言創造為基
中華詩詞(2023年8期)2023-02-06 08:51:28
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補正之道
累積動態分析下的同聲傳譯語言壓縮
日常語言與播音語言
新聞傳播(2016年10期)2016-09-26 12:15:04
語言技能退化與語言瀕危
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
Only Words慎用你的語言
主站蜘蛛池模板: 在线观看的黄网| 成人在线视频一区| 亚洲系列中文字幕一区二区| 在线免费看黄的网站| 亚洲无码高清免费视频亚洲| 19国产精品麻豆免费观看| av一区二区无码在线| 亚洲国产成人综合精品2020| 精品欧美视频| 老色鬼久久亚洲AV综合| 国产剧情国内精品原创| 久久99蜜桃精品久久久久小说| 久久久久九九精品影院| 免费女人18毛片a级毛片视频| 亚洲精品天堂在线观看| 精品亚洲麻豆1区2区3区| AV在线天堂进入| 久久精品一品道久久精品| 在线亚洲小视频| 黄片在线永久| 亚洲首页国产精品丝袜| 国产真实乱了在线播放| 国产区免费精品视频| 精品99在线观看| 91精品最新国内在线播放| 欧美三级不卡在线观看视频| 男女男精品视频| 国产三级精品三级在线观看| 久久网欧美| 久久先锋资源| 久久国产精品电影| 色九九视频| 久久久精品国产亚洲AV日韩 | 国内精品自在自线视频香蕉| 久久人妻xunleige无码| 一级毛片网| 欧洲av毛片| 亚洲人成在线精品| 精品国产乱码久久久久久一区二区| 国产一区在线观看无码| 久久毛片免费基地| 亚洲欧美日韩视频一区| 男人天堂伊人网| 国产黑丝视频在线观看| 中文字幕色在线| 亚洲日韩精品欧美中文字幕| a级毛片免费在线观看| 亚洲天堂免费观看| 萌白酱国产一区二区| 又大又硬又爽免费视频| 粉嫩国产白浆在线观看| 国产噜噜在线视频观看| 国精品91人妻无码一区二区三区| 亚洲va欧美ⅴa国产va影院| 女人av社区男人的天堂| 色屁屁一区二区三区视频国产| 精品视频一区二区三区在线播| 老司机午夜精品网站在线观看| 国产精品极品美女自在线网站| 亚洲国产AV无码综合原创| 乱人伦视频中文字幕在线| 国产剧情一区二区| 四虎综合网| 亚洲综合极品香蕉久久网| 午夜福利视频一区| 国产成+人+综合+亚洲欧美| 2021国产在线视频| 国产理论一区| 免费一级毛片完整版在线看| 成人午夜天| 中国一级特黄大片在线观看| www.精品视频| 成人另类稀缺在线观看| 精品国产黑色丝袜高跟鞋| 直接黄91麻豆网站| 国产黄色免费看| 国产免费人成视频网| 在线观看欧美精品二区| 日韩国产欧美精品在线| 国内精品久久人妻无码大片高| 色综合中文字幕| 操国产美女|