Zdravím.
Snažím se vytvořit container obsahující instance třídy pro prvek a jejích potomků. Nejde ale o pole ukazatelů na instance, ale přímo o pole instancí, a v tom asi bude ten problém, nemohu to ale změnit... Třídu pro základní prvek abstraktní udělat nemůžu, to samozřejmě zařve...
Tu je kód:
class BaseItem
{
public:
virtual void Print(ostream & os) const
{
os << "BaseItem";
}
};
class SpecialItem : public BaseItem
{
public:
virtual void Print(ostream & os) const
{
os << "SpecialItem";
}
};
class Container
{
public:
Container(void)
{
m_Items = new BaseItem[200];
m_Size = 0;
}
~Container(void)
{
delete [] m_Items;
}
Container & Insert(const BaseItem & item)
{
m_Items[ m_Size++ ] = item;
return *this;
}
friend ostream & operator << (ostream & os, const Container & c)
{
for (int i = 0; i < c.m_Size; i++) {
c.m_Items[i].Print(os);
}
return os;
}
protected:
BaseItem * m_Items;
int m_Size;
};
V mainu pak když vkládám jedn. instance a vypisuji, vždy se vypíše "BaseItem":
Container container;
container.Insert( BaseItem() ).Insert( SpecialItem() );
cout << container << endl; // BaseItemBaseItem
Existuje způsob, jak vynutit zavolání metody potomka?
Předem děkuji.