C++中的域

 這一段時間一直在琢磨對象模型,現在看到個問題都想用模型來解釋,不過確實如此,幾乎什麼都可以用對象模型來解釋
搞這個模型就絕對離不開域
到底域是什麼?這個恐怕不是三言兩語說的明白的,每個人都有一定的概念,但是可能大不相同
C++上指的是作用域
{}一對大括號就對應了一個作用域,學過C++的都知道,作用域裏的局部變量出了作用域就消亡了(根本原因是棧恢復)
而對於靜態變量,編譯器編譯的時候做了處理,解析爲“全局變量”,但這個全局變量和一般意義上的全局變量不同,它帶有記號,這個記號就是 域,標誌着這個所謂的全局變量是專屬於這個域的
重點是類域,其實類域和一般域沒什麼區別也是一對{}形成的而已
要討論的自然是函數和數據
其實同樣是編譯器在編譯的時候進行了處理,把成員函數(不管是靜態還是非靜態,虛的還是非虛的)全都解析成了全局函數,但是又帶上了記號,那就是專屬於某個類的記號,當然解析後的函數全部是獨一無二的
只是尋址這些函數的時候有所區別,這些區別也就是C++本身的特性所導致的,具體什麼特性不再此討論
然後就是數據成員,靜態數據成員,獨立於域依附於域。同樣編譯的時候解析成了專屬此類的全局變量,非靜態變量是和類的對象同生命的,依附於對象而存在。
靜態成員函數和靜態成員數據是獨立於域的,所以不需要用對象來存取,依附於域,說明可以用對象來存取,也可以用類名來存取。
說了這麼多,到底域是個什麼好像還是很沒頭緒

看看下面這張圖吧~

上面這張圖上面的虛線就是所謂的類域,非靜態數據成員是依附於對象生存在棧空間,靜態函數和數據以及非靜態函數被解析後分別存在於數據段和代碼段

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章