-
virtual 상속effective c++ & c++ 2022. 10. 20. 10:38
#include <iostream> using namespace std; class Base { public: Base() { cout << "Base Constructor" << '\n'; } void SimpleFunc() { cout << "Base" << '\n'; } }; class MiddleDerivedOne : virtual public Base { public: MiddleDerivedOne() :Base() { cout << "MiddleDerivedOne Constructor" << '\n'; } void MiddleFuncOne() { SimpleFunc(); cout << "MiddleDerivedOne" << '\n'; } }; class MiddleDerivedTwo : virtual public Base { public: MiddleDerivedTwo() :Base() { cout << "MiddleDerivedTwo Constructor" << '\n'; } void MiddleFuncTwo() { SimpleFunc(); cout << "MiddleDerivedTwo" << '\n'; } }; class LastDerived : public MiddleDerivedOne, public MiddleDerivedTwo { public: LastDerived() : MiddleDerivedOne(), MiddleDerivedTwo() { cout << "LastDerived Constructor" << '\n'; } void ComplexFunc() { MiddleDerivedOne(); MiddleDerivedTwo(); SimpleFunc(); } }; int main() { LastDerived ob; ob.ComplexFunc(); //no error return 0; }
virtual 키워드 없이 상속을 진행하게 되면 에러가 발생한다.
최상위 클래스의 함수를 호출할 때, 어떤 상위 클래스의 객체를 타고 가야하는 지에 대한 모호성이 존재하기 때문이다.
'effective c++ & c++' 카테고리의 다른 글
연산자 오버로딩 유의 사항. (0) 2022.10.20 다중 상속 (0) 2022.10.20 c++복습 - 순수 가상 함수와 추상 클래스 그리고 후위/전위 연산자 (0) 2022.10.13 c++ 복습 - 접근 지정자를 동반한 상속의 특성. (0) 2022.10.13 c++ 복습 및 정리 (0) 2022.10.06