1.如題。如果是基本型別的指標指向另外乙個型別的物件,編譯器會報錯。那麼題目這個情況,會被編譯器的型別安全檢查出來而編譯出錯麼?
經過實測,不會報錯。c++允許這樣的情況存在。
2.那麼就會問乙個問題,這個指標呼叫的資料成員或者成員函式是誰的呢?
經過測試,是基類的。
3.那麼就會繼續問乙個問題,能用這個指標呼叫派生類的東西嗎?
經過測試,可以。但是需要用強制型別轉換,將這個指標轉換成派生類的指標。
ps.當乙個基類指標用new指向乙個派生類時,基類和派生類都會初始化乙個物件,各自維護。呼叫哪乙個取決於指標是何種型別。
最後是測試程式,大家隨意感受一下~
view code
1 #include 2輸出是using
namespace
std;34
classa5
12void
f()13
1617
inta;
18};
19class b : publica20
27void
f()28
3132
inta;
33int
b;34
};35
3637
void
main()
38
繼承情況下的類作用域
建構函式和析構函式中的虛函式,構造和析構也是分階段的,也就是說從無到基類物件,再到派生類物件,從派生類物件到基類物件,再到無。這中間有乙個狀態就是基類物件,此時直接或間接呼叫虛函式,只能是基類中的版本,因為後邊的還沒形成呢。因為如果使用派生類中的版本,可能需要訪問派生類物件的成員,而這些還不存在,為...
繼承情況下類的作用域
在繼承情況下,派生類的作用域巢狀在基類作用域中。因此,如果不能在派生類作用域中確定的名字,就在外圍基類作用域中查詢該名字的定義。在基類和派生類中使用同一名字的成員函式,其行為與資料成員一樣 在派生類作用域中派生類成員將遮蔽基類成員。即使函式原型不同,基類成員也會被遮蔽。如果要訪問被遮蔽的基類成員,需...
C 中繼承情況下的類作用域
首先,每乙個類都保持著自己的作用域,在該作用域中定義了成員的名字。物件 引用或指標的靜態型別決定了物件能夠完成的行為 c primer 這裡能夠完成的行為,應該說是能夠使用的變數名 資料和方法 這些變數名是定義在呼叫它的物件 引用或指標的靜態型別中的。為什麼將行為改為變數名,是因為我覺得行為是處理事...