2 つのクラスがあり、そのうちの 1 つはもう 1 つのクラスを継承します。
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;}
派生クラス オブジェクトを作成して show 関数を呼び出すと、「派生クラス」が正しく出力されます。私が次のことをした場合:
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);
そして、各アイテムで show を呼び出してみてください:
it = t.begin();
it->show();
it++;
it->show();
b と d の両方の出力は「基本クラス」です。私の質問は、なぜ show() の baseClass バージョンのみを使用しているのですか? また、リスト内の派生クラスのオブジェクトに対して派生バージョンを適切に使用するにはどうすればよいですか?
前もって感謝します