추상 클래스가있는 곳에서 메소드 오버라이드를 올바르게 처리하는 데 문제가 있습니다. 내 클래스 계층 구조 내에 이 있습니다. 내가 설명하려고합니다 :추상 클래스의 C++ 및 상속
class AbstractClass{
public:
virtual void anyMethod() = 0;
};
class A : public AbstractClass {
void anyMethod() {
// A implementation of anyMethod
cout << "A";
}
};
class B : public AbstractClass {
void anyMethod() {
// B implementation of anyMethod
cout << "B";
}
};
AbstractClass *ptrA, *ptrB;
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints A
ptrB->anyMethod(); //prints B
Ok..previous 예를 잘 작동이 있습니다 .. AbstractClass 방법 anyMethod의 구체적인 구현은 런타임에 호출됩니다. 그러나 AbstractClass는 anyMethod라는 가상이 아닌 방법이 다른 기본 클래스에서 파생 : 나는 무엇을 오해하고
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints OtherClass
ptrB->anyMethod(); //prints OtherClass
: 내가 그런 일을하려고하면, 지금
class OtherClass {
public:
void anyMethod() {
cout << "OtherClass";
}
};
class AbstractClass : public OtherClass {
public:
virtual void anyMethod() = 0;
};
//A and B declared the same way as described before.
를? cast, typeid 등을 사용하지 않고 ptrA 및 ptrB A 및 B를 인쇄하기위한 솔루션이 있습니까?
코드를 형식화하십시오. – Elalfer
A와 B는 두 번째 경우에도 인쇄해야합니다. 당신의 설명에서 뭔가 빠졌습니까? – vitaut
g ++에서 코드를 테스트하고 두 경우 모두 A와 B를 인쇄합니다. 혹시'OtherClass * '를 사용하고 있습니까? – casablanca