추상클래스의 다형성, 순순가상함수 모호성, 그리고 클래스 함수 외부 정의 복합적 문제
글쓴이: 레모네이드 / 작성시간: 화, 2007/01/23 - 4:57오후
다음과 같은 코드는 정상입니다...
컴파일 환경 .net , g++ 둘다 정상적으로 컴파일되고 결과도 잘 나옵니다...
#include// stdio.h class A { public: virtual void f() = 0; }; class B : public A { public: virtual void f() = 0; }; class C : public A { public: virtual void f() = 0; }; class D : public B, public C { public: virtual void ::B::f() { printf("B::f()\n"); } virtual void ::C::f() { printf("C::f()\n"); } }; int main(int argc, char* argv[]) { D d; A* pb = (B*)&d; A* pc = (C*)&d; pb->f(); pc->f(); return 0; }
/////////
실행결과
B::f()
C::f()
/////////
그리고 다음 코드는 명백한 오류랍니다.. 제가봐도 오류가 맞는거 같습니다..
#include// stdio.h class A { public: virtual void f() = 0; }; class B : public A { public: virtual void f() = 0; }; class C : public A { public: virtual void f() = 0; }; class D : public B, public C { public: virtual void ::B::f(); virtual void ::C::f(); }; virtual void D::B::f() { // Class D 내부에 선언된 클래스 B의 함수 f()를 뜻하죠 ㅠㅠ...내부 클래스 B는 없으므로 에라 printf("B::f()\n"); } virtual void D::C::f() { // Class D 내부에 선언된 클래스 C의 함수 f()를 뜻하죠 ㅠㅠ... 내부 클래스 C는 없으므로 에라 printf("C::f()\n"); } int main(int argc, char* argv[]) { D d; A* pb = (B*)&d; A* pc = (C*)&d; pb->f(); pc->f(); return 0; }
클래스 함수를 내부 정의하면 정상적으로 동작하고 이름의 모호성도 명시적 지정을 통해서 해결이 가능한데,
위와 같은 경우에서 클래스 함수를 외부 정의하는 방법을 모르겠습니다..
이부분은 책에도 없고, 외국 C++사이트 QaA 뒤져도 없고....음...제가 엉뚱한 추상클래스를 만들고 있는건가요?
다만 조사하지 못한것은 스트로스트럽이 저술한 C++ 원서만 못봤습니다...영어가 짧아서 책도 엄네요....
혹 조사 가능하신분만 부탁드립니다..
잘못하면 훼인이 될수도 ㅠㅠ...갑자기 이문제 걸려서 진도를 못나가고 있어서 질문 올립니다..
만약 문법적으로 불가능한 사항이라면 알려주시면 감사하겠습니다.
Forums:
둘 다 컴파일
둘 다 컴파일 안됩니다.
메소드 네임이 모호하니 간접적으로 바꾸세요.
보통 이런 방식으로 합니다. 자세한건 c++ 책들을 참고하세요.
댓글 달기