#include <iostream>
using namespace std;
class A
{
public:
virtual ~A() {}
virtual void Render()
{
cout << "A" << endl;
}
};
class B : virtual public A
{
public:
virtual ~B() {}
virtual void Render()
{
cout << "B" << endl;
}
};
class C : virtual public A
{
public:
virtual ~C() {}
virtual void Render()
{
cout << "C" << endl;
}
};
class D : virtual public B, virtual public C
{
public:
virtual ~D() {}
virtual void Render()
{
cout << "D" << endl;
}
};
int main()
{
A* a = new D;
a->Render();
delete a;
return 0;
}
어제 궁금했던 다이아몬드 상속시 가상함수 실행
주석처리 해가면서 실행해봄

기본 D실행


D 주석시 모호성 발생
C,D 주석시 B실행
B,D 주석시 C실행
B,C,D 주석시 A 실행
결론적으로 내가 원하는 사용법은
#include <iostream>
using namespace std;
class A
{
public:
virtual ~A() {}
virtual void Render() = 0;
};
class B : virtual public A
{
public:
virtual ~B() {}
virtual void Render()
{
cout << "B" << endl;
}
};
class C : virtual public A
{
public:
virtual ~C() {}
virtual void Render()
{
cout << "C" << endl;
}
};
class D : virtual public B, virtual public C
{
public:
virtual ~D() {}
virtual void Render()
{
B::Render();
C::Render();
cout << "D" << endl;
}
};
int main()
{
A* a = new D;
a->Render();
delete a;
return 0;
}
B C D 출력하는
이고내욥