Virtualは菱形継承における複数のコピー問題を解決する

804 ワード

菱形継承をずっと知っていたとき、虚継承は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;
}