我在正确处理存在抽象类的方法重写时遇到问题
在我的类层次结构中。
我会尝试解释一下:
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
好的..前面的示例工作正常.. AbstractClass 的具体实现
方法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";
};
}
这应该可以解决你的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)