我有兩個班,其中一個繼承其他:從對象使用導出函數列表對象內部
class baseClass
{
public:
virtual void show();
};
void baseClass::show(){cout << "Base class" << endl;}
class derivedClass
{
public:
void show();
};
void derivedClass::show(){cout << "Derived class" << endl;}
如果我做一個derivedClass對象,並呼籲展示功能,它正確地打印「派生類」。如果我這樣做:
derivedClass b;
baseClass* b;
b=&d;
b->show();
它再次正確地打印出「派生類」。 但是,如果我做一個列表,像這樣:
list<baseClass> t;
list<baseClass>::iterator it;
baseClass b;
derivedClass d;
t.push_back(b);
t.push_back(d);
並嘗試撥打顯示在每個項目上:
it = t.begin();
it->show();
it++;
it->show();
兩個b和d輸出爲「基地班」。 我的問題是:爲什麼它只使用showCode()的baseClass版本,以及如何才能正確使用派生版本中的derivedClass對象在列表中?
在此先感謝
我的壞,那是在這個問題(這是我editted)錯誤,顯示()是在基類虛。正如你所說,我已經嘗試在derivedClass中使show()虛擬,但它仍然沒有調用正確的函數。 – James
我得到了相同的結果。它與迭代器有關。給我一秒來更新我的答案。 – Mysticial
感謝捆綁包,(* it)是我一直困住的部分(昨天也試過*和*(它))。<)現在完美地工作 – James