Re: [問題] Virtual base class (diamond inherita …
※ 引述《easy1 ( )》之銘言:
: C++ 新手
: 想問有關 Virtual base class 的問題
: 在所謂的 diamond inheritance 關係中
: 如果這樣
: class Base {};
: class Derived1 : public Base {};
: class Derived2 : public Base {};
: class Multi : public Derived1, public Derived2 {};
: 以下這樣是不允許的
: Base * ptr = new Multi;
: 一定要 宣告成virtual
: class Base {};
: class Derived1 : virtual public Base {};
: class Derived2 : virtual public Base {};
: class Multi : public Derived1, public Derived2 {};
: 但是為什麼?
: 網路上寫的的解釋我不是很能接受
: 說如果不宣告成 virtual base class
: 什麼這樣 Multi 會有兩個 Base 的 objects
: pointer ptr 不知道要指到哪一個!
: 這樣的解釋不知道是不是我誤會
: 但我不是很理解
: 當我 new 一個 Multi 的時候 不是就只有一個object 嗎
概念上是一個沒錯.
但實際上, 每個 child class obj instance
裡面都有 parent class 的部份, 你可以想象
為, 每個 child class object instance 裡面
有一個 instance attribute 是 parent class
object instance.
類似這樣:
+-------------------+
| Child |
| |
| +-------+ |
| |Parent | |
| | | |
| +-------+ |
| |
+-------------------+
就是靠這樣, child class 才會 繼承了 parent class
的資料 etc.
同理, 在多重繼承的情況下, 包含每 parent class 一個
的 instance attribute
要是 Child 有兩個 parent class (P1, P2) 而 P1, P2
inherited from G, 那麼 Child 裡面的 P1 P2 就會
各自包含一個分開的 G instance. 結果是 G 的資料 etc
會有兩份, 經由 P1 和 P2 會access 到不同的 G.
+------------------------+
| Child |
| |
| +-------+ +-------+ |
| | P1 | | P2 | |
| | +---+ | | +---+ | |
| | | G | | | | G | | |
| | +---+ | | +---+ | |
| +-------+ +-------+ |
+------------------------+
用 virtual inheritence 就是把兩者的 G 合起來,
令到 Child 裡面只存著一份 G
這樣瞭了嗎? :)
alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推
03/13 11:49, , 1F
03/13 11:49, 1F
→
03/13 14:25, , 2F
03/13 14:25, 2F
推
03/13 15:00, , 3F
03/13 15:00, 3F
推
03/13 17:49, , 4F
03/13 17:49, 4F
→
03/13 17:55, , 5F
03/13 17:55, 5F
→
03/13 17:55, , 6F
03/13 17:55, 6F
→
03/13 18:46, , 7F
03/13 18:46, 7F
推
03/13 19:44, , 8F
03/13 19:44, 8F
→
03/13 19:45, , 9F
03/13 19:45, 9F
推
03/13 20:00, , 10F
03/13 20:00, 10F
推
03/14 00:06, , 11F
03/14 00:06, 11F
推
03/14 02:01, , 12F
03/14 02:01, 12F
→
03/14 11:41, , 13F
03/14 11:41, 13F
→
10/09 12:11, , 14F
10/09 12:11, 14F
推
10/09 15:12, , 15F
10/09 15:12, 15F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章