Hei*_*bug 3 c++ inheritance class abstract
我有一个问题,正确处理方法覆盖我的类层次结构中存在抽象类的位置.我会试着解释一下:
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
Run Code Online (Sandbox Code Playgroud)
好的..以前的示例工作正常.. AbstractClass方法的具体实现anyMethod将在运行时调用.但是AbstractClass是从另一个基类派生的,它有一个非虚拟的方法,叫做anyMethod:
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.
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试这样的事情:
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints OtherClass
ptrB->anyMethod(); //prints OtherClass
Run Code Online (Sandbox Code Playgroud)
我有什么误会?有没有使用cast,typeid等制作ptrA和ptrB打印A和B的解决方案?
你为什么不这样做:
class OtherClass
{
public:
virtual void anyMethod()
{
cout << "OtherClass";
};
}
Run Code Online (Sandbox Code Playgroud)
那应该可以解决你的问题