?
B?C虛繼承A,D?public繼承?B?C?,有A?*a?=?new?D,a->fun(),fun是虛函數,并且B?C都重寫了,怎么保證a調用的是B重寫的虛函數。
#include <iostream>
using namespace std;class A
{
public:virtual void fun() { cout << "A::fun()." << endl; }
};class B :public virtual A
{
public:void fun() { cout << "B::fun()." << endl; }
};class C :public virtual A
{
public:void fun() { cout << "C::fun()." << endl; }
};class D :public B, public C
{
public:void fun() { cout << "D::fun()." << endl; }
};int main()
{A* a = new D;(dynamic_cast<B*>(a))->B::fun();return 0;
}
// 輸出:B::fun().
?