[問題] 關於虛擬繼承的觀念。
自認為虛擬繼承的觀念很模糊,通常一多重,自己的答案就很沒信心。
希望強者可以給我淺顯易懂的理解。
Case 1:
main1跑下來結果d->virt1()沒問題應該是150沒錯,但Global1( d )跑出來的結果為什麼不是100?
#include <stdio.h>
class Base1
{
public:
virtual int virt1() { return 100; }
int data1;
};
class Derived : public Base1
{
public:
virtual int virt1() { return 150; }
int derivedData;
};
int Global1( Base1 * b1 )
{
return b1->virt1();
}
main1()
{
Derived * d = new Derived;
printf( "%d %d\n", d->virt1(), Global1( d ));
}
________
Case 2:Main2跑下來的結果,
md->virt1() 應該是150
Global1( md )這個是100還是150自己就沒甚麼信心了。
md->virt2()這個應該也是250
Global2( md )這個應該是250吧?
class Base2
{
public:
virtual int virt2() { return 200; }
int data2;
};
class MultipleDerived : public Base1, public Base2
{
public:
virtual int virt1() { return 150; }
virtual int virt2() { return 250; }
int derivedData;
};
int Global2( Base2 * b2 )
{
return b2->virt2();
}
main2()
{
MultipleDerived * md = new MultipleDerived;
printf( "%d %d %d %d\n",
md->virt1(), Global1( md ), md->virt2(), Global2( md ));
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 12.106.68.40
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1469568101.A.84D.html
推
07/27 05:41, , 1F
07/27 05:41, 1F
→
07/27 05:41, , 2F
07/27 05:41, 2F
推
07/27 06:48, , 3F
07/27 06:48, 3F
推
07/27 09:06, , 4F
07/27 09:06, 4F
推
07/27 09:11, , 5F
07/27 09:11, 5F
→
07/27 09:11, , 6F
07/27 09:11, 6F
推
07/27 18:08, , 7F
07/27 18:08, 7F
推
07/27 18:11, , 8F
07/27 18:11, 8F
→
07/27 18:11, , 9F
07/27 18:11, 9F
推
07/28 02:10, , 10F
07/28 02:10, 10F
→
07/28 02:10, , 11F
07/28 02:10, 11F
→
07/28 02:10, , 12F
07/28 02:10, 12F