[c++]Problem z listą: list <KlasaBazowa*> lista

0

Witam, mam taki problem. W moim programie chcę zrobić klasę listę obiektów mojej klasy bazowej i jej klas pochodnych.
Mam KlasęBazową, KlasęPochodną1, KlasęPochodną2 i KlasęPochodnąPochodnej2.
Chciałbym stworzyć mniej więcej taką klasę:

class ListaObiektow
{
protected:
	list <KlasaBazowa*> lista;
public:

	void Pokaz();

	void Dodaj();
	void Usun();
	void Sortuj();
	void Edytuj();


	ListaObiektow();
	~ListaObiektow();
};

Konstruktor z dodawaniem obiektów wygląda tak:

{
	int x= 0;
	bool dodawanie = 0;

	do
	{
		
		std::cout << "dodaj : " << endl;
		std::cin >> x;

		switch (x)
		{
		case 1:
		{
			KlasaPochodna1 *obiekt = new KlasaPochodna1;
			lista.push_back(obiekt);
		}break;
		case 2:
		{
			KlasaPochodna2 *obiekt = new KlasaPochodna2;
			lista.push_back(obiekt);
		}break;
		case 3:
		{
			KlasaPochodnaPochodnej2 *obiekt = new KlasaPochodnaPochodnej2;
			lista.push_back(obiekt);
		}break;
		default:
			break;
		}
		std::cout << "czy chcesz dodać kolejny?(1-tak,0-nie)" << endl;
		std::cin >> dodawanie;
	} while (dodawanie == true);
	system("CLS");
}

Lecz funkcja która pokazuje mi obiekty z listy pokazuje je tylko jak by były typu KlasaBazowa.

Pokaz()
{
	for (auto it : lista)
	{
		cout << *it << "\n"; // operator cout(<<) został przeciążony dla każdej z klas 
	}
	system("PAUSE");
}

Nie wiem za bardzo jak to zrobić.

0

Czy przeciazony operator jest wirtualny?

3

Żeby dostać zachowanie polimorficzne, musisz wywołać metodę wirtualną. operator<< nie jest metodą wirtualną.
Stwórz wirtualną metodę print i korzystaj z niej.

0

na razie umiem korzystać z tego:

ostream& operator<<(ostream& stream, const KlasaBazowa& p)
{
	stream << "Obiekt: " << p.pole << "\n';
	return stream;
}
Każda klasa posiada coś takiego.

Moglibyście rozszerzyć swoje odpowiedzi bo nie do końca wiem o co chodzi

Edit2:
Jeżeli chodzi o obiekt->Pokaz(); to też mi nie działa

1

Zamiast

cout << *it << "\n"; 

zrób tak, by to się skompilowało

it->print();

tj. dodaj metodę wirtualną print() do swoich klas.

0

Wielkie dzięki, działa :D
Tylko teraz muszę coś naprawić bo do końca nie działa inna funkcja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1