非多型的繼承情況下,基類指標可以指向派生類物件麼?

2022-09-20 05:51:13 字數 741 閱讀 1030

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 這裡能夠完成的行為,應該說是能夠使用的變數名 資料和方法 這些變數名是定義在呼叫它的物件 引用或指標的靜態型別中的。為什麼將行為改為變數名,是因為我覺得行為是處理事...