我在正確處理方法覆蓋抽象類在我的類層次結構中存在 時遇到問題。 我會盡力解釋:抽象類中的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例如,做工精細。該抽象類 方法anyMethod的具體實施將在運行時被調用。 但抽象類是由具有不虛 的方法稱爲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.
現在,如果我嘗試類似的東西:
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints OtherClass
ptrB->anyMethod(); //prints OtherClass
我是什麼誤會? 有沒有解決方案使ptrA和ptrB打印A和B而不使用cast,typeid等?
請格式化您的代碼 – Elalfer 2011-01-24 17:47:44
A和B也應在第二種情況下打印。你從描述中遺漏了什麼? – vitaut 2011-01-24 17:53:42