C++細(xì)節(jié)深度探索及軟件工程
嵌套類(lèi)的訪問(wèn)問(wèn)題:
記得白鳳煮的C++中有一句這樣的話:C++嵌套類(lèi)只是語(yǔ)法上的嵌套。然而在實(shí)踐過(guò)程中,卻并非如此。Ex:
可見(jiàn),類(lèi) A1 嵌入A后訪問(wèn)A的靜態(tài)變量不寫(xiě)外圍域沒(méi)有任何問(wèn)題,從編譯的角度看,此時(shí)位于A::的作用域內(nèi),在符號(hào)表中是可以找到a的(注意,a必須為static的)。這一點(diǎn),與分開(kāi)寫(xiě)的兩個(gè)類(lèi)明顯不同
這段代碼在VC中不能編譯通過(guò),但在DEV-C++是可以的,也就是不同的編譯對(duì)于嵌套類(lèi)是否能訪問(wèn)外圍類(lèi)的私有成員的定義是不一致的。
嵌套類(lèi)的不同作用域同名問(wèn)題:
輸出內(nèi)部的a沒(méi)有問(wèn)題,如果要訪問(wèn)外部的,使用A::a指明作用域就可以,而且在嵌套類(lèi)中,可以定義靜態(tài)的成員。用類(lèi)似A::A1::a就可以訪問(wèn).先看一下Java的情況Ex:
由定義就可看出,Java的定義是動(dòng)態(tài)定義的,是基于this指針的,因此,嵌套類(lèi)不只在語(yǔ)法上,在語(yǔ)義上也有隸屬關(guān)系,外圍類(lèi)的成員,包含私有成員,對(duì)于內(nèi)部類(lèi)也是可見(jiàn)的。因此內(nèi)部非Static的類(lèi)不能有Static成員,且這樣的內(nèi)部類(lèi)只有在外層的對(duì)象建立后才能對(duì)建立,所以你可以這么建立對(duì)象:Ex:
對(duì)比上面Java的定義,可見(jiàn)C++中的黓認(rèn)行為和Java中的靜態(tài)類(lèi)相似,由此,可以猜出C++中的類(lèi)是做靜態(tài)存儲(chǔ)的。因此,可以輕松的得出如下語(yǔ)句也是可以的:
因此,也可以得到在 C++ 中 ,內(nèi)部類(lèi)也是可以有靜態(tài)對(duì)象的。
Powered by: C++博客 Copyright © 常興龍