У меня есть два класса, один из которых наследует другой:
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 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() базового класса и как я могу заставить его правильно использовать производную версию для объектов производного класса в списке?
заранее спасибо