4
確定說,我們有以下類C++繼承虛函數
class A
{
public:
virtual void taco()
{
cout << "Class A" << endl;
}
};
class B: public A
{
public:
virtual void taco()
{
cout << "Class B" << endl;
}
};
class C : public A
{
public:
void taco()
{
cout << "Class C" << endl;
}
};
現在,如果我這樣做
A a = A();
B b = B();
C c = C();
a.taco(); //Class A
b.taco(); //Class B
c.taco(); //Class C
deque<A> aa = deque<A>();
aa.push_back(a);
aa.push_back(b);
aa.push_back(c);
for(int i=0;i<aa.size();i++)
aa[i].taco();//All Class A
A r = B();
r.taco(); //Class A
現在,當我初始化爲B或C,你會發現,它贏得了」 t從B或C發出函數。我想知道是否有任何解決方法?我理解這個概念,因爲對象是A,它使用A的taco函數,但我只是想知道是否有一些技巧來獲取其他函數。我的項目相當複雜,並且我無法知道將覆蓋A的所有類(由於插件覆蓋類)。另外,我還需要讓基本虛擬函數有一個主體來添加默認行爲。謝謝。
使用指針並動態創建對象。 C++中的多態性需要使用指針或引用。這應該包含在任何C++教科書中 - 您正在使用哪一種教科書? – 2011-05-26 13:29:38
爲什麼不把它作爲答案。 – ColWhi 2011-05-26 13:32:07
Neil可能已經將它寫爲評論,但將其當作回答;-) – Pike65 2011-05-26 13:32:13