Virtualは菱形継承における複数のコピー問題を解決する
菱形継承をずっと知っていたとき、虚継承は1つのベースクラスの複数のコピーの問題を解決することができた.しかし、virtualがどこに追加されるべきかは忘れてしまいました.俗説が上手ですね.記憶力がいいのは腐った筆頭に及ばないので、覚えておきましょう.純粋なノートですから、読者は省略してください.
#include<iostream>
using namespace std;
class A
{
public:
A(){ cout << "A()" << endl;}
~A(){ cout << "~A()" << endl;}
};
class B: virtual public A
{
public:
B(){ cout << "B()" << endl;}
~B(){ cout << "~B()" << endl;}
};
class C:virtual public A
{
public:
C(){ cout << "C()" << endl;}
~C(){ cout << "~C()" << endl;}
};
class D: public B, C
{
public:
D(){ cout << "D()" << endl;}
~D(){ cout << "~D()" << endl;}
};
int main()
{
D d;
return 0;
}