Добрый день, уважаемый all.
Вопрос следующего характера:
если есть абстрактный родительский класс A,
class A
{
public:
virtual void f()=0;
};
и его наследник класс B
class B: public A
{
public:
virtual void f() { cout<< "B::f()" <<endl; }
};
как можно реализовать использование, например, std::list<A*> вместо std::list<B*>, например, в таком случае:
void func(const std::list<A*> & lst)
{
for (std::list<A*>::const_iterator it=lst.begin();it!=lst.end();it++)
(*it)->f();
}
int main ()
{
B tmp;
std::list<B*> lst;
lst.push_back(&tmp);
func(lst);
return 0;
}
Собственно, если бы функция main выглядела так:
int main ()
{
A * tmp=new B();
std::list<A*> lst;
lst.push_back(tmp);
func(lst);
return 0;
}
Никаких бы проблем не было, но но всегда удобно хранить список указателей на родительские классы..