Anonymní profil Petr – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Petr – Programujte.comAnonymní profil Petr – Programujte.com

 

Příspěvky odeslané z IP adresy 90.176.199.–

Petr
C / C++ › Dědičnost - volání metody př…
21. 4. 2012   #156892

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.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý