我在正确处理存在抽象类的地方重写方法时遇到问题 在我的类层次结构中。 我将尝试解释:
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
好的..前面的例子工作正常..抽象类的具体实现 方法 anyMethod 将在运行时调用。 但是 AbstractClass 派生自另一个基类,该基类的方法不是虚拟的 称为任何方法:
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.
现在,如果我尝试这样的事情:
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints OtherClass
ptrB->anyMethod(); //prints OtherClass
我误会了什么? 是否有任何解决方案可以使 ptrA 和 ptrB 打印 A 和 B 而无需使用 cast、typeid 等?
最佳答案
你为什么不这样做:
class OtherClass
{
public:
virtual void anyMethod()
{
cout << "OtherClass";
};
}
这应该可以解决你的问题
关于C++ 和抽象类中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785207/