C 中繼承情況下的類作用域

2021-06-06 14:25:36 字數 362 閱讀 5858

首先,每乙個類都保持著自己的作用域,在該作用域中定義了成員的名字。

物件、引用或指標的靜態型別決定了物件能夠完成的行為(c++ primer)。這裡能夠完成的行為,應該說是能夠使用的變數名(資料和方法),這些變數名是定義在呼叫它的物件、引用或指標的靜態型別中的。為什麼將行為改為變數名,是因為我覺得行為是處理事件的方法,而在靜態型別和動態型別在處理時的行為可能是不同的。

這裡的名字衝突是發生在c++中的基類同繼承類之間的。與基類成員同名的派生類成員將遮蔽對基類成員的直接訪問(c++ primer)。需要注意的是:基類成員包括資料和函式方法。

在派生類作用域中派生類成員將遮蔽基類成員,即使函式原型不同,基類成員也會被遮蔽。

這裡可以參考:區域性作用域中

繼承情況下的類作用域

建構函式和析構函式中的虛函式,構造和析構也是分階段的,也就是說從無到基類物件,再到派生類物件,從派生類物件到基類物件,再到無。這中間有乙個狀態就是基類物件,此時直接或間接呼叫虛函式,只能是基類中的版本,因為後邊的還沒形成呢。因為如果使用派生類中的版本,可能需要訪問派生類物件的成員,而這些還不存在,為...

繼承情況下類的作用域

在繼承情況下,派生類的作用域巢狀在基類作用域中。因此,如果不能在派生類作用域中確定的名字,就在外圍基類作用域中查詢該名字的定義。在基類和派生類中使用同一名字的成員函式,其行為與資料成員一樣 在派生類作用域中派生類成員將遮蔽基類成員。即使函式原型不同,基類成員也會被遮蔽。如果要訪問被遮蔽的基類成員,需...

Java 繼承情況下例項變數的初始化

package scjp class x class y public class demo65 extends x public static void main string args 執行結果 yxyz 分析 1.new demo65 1.2.demo65的超類是x,所以 new x 1.2....