effective c++ & c++
다중 상속
공대녀J
2022. 10. 20. 10:44
#include <iostream>
using namespace std;
class BaseOne
{
public:
void SimpleFunc() { cout << "BaseOne" << '\n'; }
};
class BaseTwo
{
public:
void SimpleFunc() { cout << "BaseTwo" << '\n'; }
};
class MultiDerived :public BaseOne, protected BaseTwo
{
public:
void ComplexFunc()
{
BaseOne::SimpleFunc();
BaseTwo::SimpleFunc();
}
};
int main()
{
MultiDerived ob;
ob.ComplexFunc();
ob.SimpleFunc(); //error
return 0;
}
BaseTwo는 protected 상속을 해줬으므로 ob.SimpleFunc()은
public으로 상속된 BaseOne의 SimpleFunc을 호출해줄 것 같지만.. 에러가 난다.
ob.BaseOne::SimpleFunc(); //no error
ob.BaseTwo::SimpleFunc(); //error
이런 식으로 클래스를 명시해주면 protected 상속한 BaseTwo의 SimpleFunc은 호출해 줄 수 없지만,
public 상속한 BaseOne의 SimpleFunc은 호출해 줄 수 있다.
ob.SimpleFunc()으로 호출해주면 상속의 모호성 때문에 일단 에러를 일으키는 것 같다.
상속의 접근 지정자는 고려되지 않는 듯..