Question
역시 C++ 뉴스그룹에 올라온 것으로 찾아보면 자주 반복되어 온 질문중의 하나입니다. ((comp.lang.c++.moderated:Multiply inherit from classes with conflicting function names))struct A {
virtual long fun() = 0;
};
struct B {
virtual bool fun() = 0;
};
struct Unfortunate : public A, public B {
???
};
질문을 요약해보면...- ???부분을 합법적인 코드를 가지고 구현할 수 있는가?
- 물론 두 fun 함수 모두 각자의 구현을 가져야 한다.
Answer
워낙 많이 다루어진 질문이라 바로 답으로 넘어갑니다. 여기서 답이라는 것은 일반적으로 이런 방법을 사용한다는 뜻입니다.다음과 같이 중간 계층의 클래스를 추가하여 각 함수에 고유의 이름을 줌으로써 각각의 함수 구현이 가능합니다.
struct Abis : A {
virtual long funA() = 0;
virtual long fun() { return funA(); }
};
struct Bbis : B {
virtual bool funB() = 0;
virtual bool fun() { return funB(); }
};
struct Unfortunate : Abis, Bbis {
virtual long funA() { ... }
virtual bool funB() { ... }
};
위의 코드를 사용하여 다음과 같이 사용할 수 있습니다.
Unfortunate u;
u.funA();
u.funB();
A* a = &u;
B* b = &u;
a->fun(); // call long Unfortunate::funA()
b->fun(); // call bool Unfortunate::funB()
Comments
Post a Comment