|
님의 코드의 문제점은
1. 외부에서 클래스의 매서드를 사용하려 하면서도 public 영역에 매서드가 없고.
2. TPureVirtualFunctionCallErrorClass 클래스의 경우 TPureVirtualMethodClass를 상속받지 않은 상태에서 TPureVirtualMethodClass의 CanDeleteSomeMember 순수가상함수를 오버라이딩하려했습니다.
//아래와 같이 해보니 아무 오류가 안 나네요.
class TNormalClass
{
public:
char * __fastcall func1()
{
return "TNormalClass";
}
};
class TEmptyClass
{
// nothing here
};
class TPureVirtualMethodClass
{
virtual bool __fastcall CanDeleteSomeMember() = 0;
};
// 컴파일시 알 수 없는 오류코드가 나는 클래스
class TUnknownErrorClass : public TNormalClass, public TEmptyClass
{
};
// 런타임시 pure virtual function call 에러가 나는 클래스
class TPureVirtualFunctionCallErrorClass : public TNormalClass, public TEmptyClass,public TPureVirtualMethodClass
{
public:
virtual bool __fastcall CanDeleteSomeMember() { return true; }
};
//인스턴스 생성 및 호출
TPureVirtualFunctionCallErrorClass ErrorClass;
ShowMessage(ErrorClass.CanDeleteSomeMember()?"true":"false");
TUnknownErrorClass uec;
ShowMessage(uec.func1());
한동희 님이 쓰신 글 :
: 다중상속을 이용해 코딩을 하다보니 두 가지 문제가 생겼습니다.
:
: 하나는 멤버가 전혀 없는 빈 클래스를 다중 상속 받은 경우 알 수 없는 에러가 났고
:
: 또 하나는 순수 가상 함수를 가진 클래스를 다중 상속 받은 경우 그 함수를 아래 클래스에서
:
: 재정의 했는데도 런타임에서 pure virtual function call에러가 나더군요.
:
: 예를들어
:
: class TNormalClass
: {
: ....
: }
:
: class TEmptyClass
: {
: // nothing here
: }
:
: class TPureVirtualMethodClass
: {
: virtual bool __fastcall CanDeleteSomeMember() = 0;
: }
:
: // 컴파일시 알 수 없는 오류코드가 나는 클래스
: class TUnknownErrorClass : public TNormalClass, public TEmptyClass { ... }
:
: // 런타임시 pure virtual function call 에러가 나는 클래스
: class TPureVirtualFunctionCallErrorClass : public TNormalClass, public TEmptyClass
: {
: virtual bool __fastcall CanDeleteSomeMember() { return true; }
: }
: TPureVirtualFunctionCallErrorClass ErrorClass;
: ErrorClass.CanDeleteSomeMember() => ERROR!!
:
: 혹시 이것에 대해 아시는분 계시지요?
:
:
|