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

C++中靜態(tài)成員應用方法的探討

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

張藝濤 沈木子 方歡

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

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

1 引言

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

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

2 存在的問題

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

3 問題探索

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

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

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

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

5 總結

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

參考文獻:

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

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

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

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

【通聯(lián)編輯:王力】

猜你喜歡
語言
詩之新,以語言創(chuàng)造為基
中華詩詞(2023年8期)2023-02-06 08:51:28
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補正之道
累積動態(tài)分析下的同聲傳譯語言壓縮
日常語言與播音語言
新聞傳播(2016年10期)2016-09-26 12:15:04
語言技能退化與語言瀕危
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
Only Words慎用你的語言
主站蜘蛛池模板: 日韩AV无码一区| 亚洲欧美日韩动漫| 午夜视频日本| 99在线观看国产| 91免费观看视频| 亚洲天堂久久新| 毛片国产精品完整版| AV老司机AV天堂| 国产成人一区在线播放| 国产精品手机视频| 久久综合久久鬼| 国产精彩视频在线观看| 中文字幕 欧美日韩| 99热这里只有免费国产精品| 九九香蕉视频| 亚洲精品卡2卡3卡4卡5卡区| 成人小视频网| 亚洲精品福利视频| 国产成人乱无码视频| 国产在线拍偷自揄观看视频网站| 亚洲欧美人成人让影院| 亚洲人成日本在线观看| 欧美不卡视频一区发布| 国产精品毛片一区视频播| 国产在线拍偷自揄拍精品| 一区二区三区毛片无码| 日韩在线播放中文字幕| 成人国产精品一级毛片天堂| 国产一级毛片yw| 国产成人精彩在线视频50| 亚洲国产精品一区二区高清无码久久 | 亚洲经典在线中文字幕| 日韩精品一区二区三区中文无码| 在线观看无码av五月花| 亚洲美女一区二区三区| 成人国产一区二区三区| 白浆免费视频国产精品视频| 日本黄网在线观看| 亚洲天堂精品视频| 国产在线小视频| 麻豆a级片| 精品人妻无码区在线视频| 亚洲人成人伊人成综合网无码| 免费国产好深啊好涨好硬视频| 伊人久久久大香线蕉综合直播| 99re在线观看视频| 乱码国产乱码精品精在线播放| 日韩在线视频网站| 67194亚洲无码| 极品国产一区二区三区| 国产高清在线观看91精品| 国产在线自揄拍揄视频网站| 精品久久人人爽人人玩人人妻| 一本二本三本不卡无码| 114级毛片免费观看| 亚洲人成网7777777国产| 日本尹人综合香蕉在线观看| 99偷拍视频精品一区二区| 国产Av无码精品色午夜| 大陆国产精品视频| 色综合久久88色综合天天提莫| 18禁黄无遮挡免费动漫网站| 国产美女精品一区二区| 亚洲国产综合精品中文第一| 女人18一级毛片免费观看| 日韩欧美中文字幕一本| 国产视频 第一页| 国外欧美一区另类中文字幕| 免费日韩在线视频| 黄色在线不卡| 午夜性爽视频男人的天堂| 精品无码一区二区三区电影| 午夜免费小视频| 国产美女在线免费观看| 色网在线视频| 国产精品视频导航| 亚洲永久精品ww47国产| 亚州AV秘 一区二区三区| 激情无码视频在线看| 亚洲成人网在线观看| AⅤ色综合久久天堂AV色综合| 一区二区三区国产|