• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++, lista roznych klas pochodnych

Cloud VPS
–1 głos
227 wizyt
pytanie zadane 11 maja 2017 w C i C++ przez Isild Użytkownik (620 p.)
edycja 13 maja 2017 przez Isild

Witam, mam takie pytanie i problem.
Mam klasę bazową, klasa pochodna1, klasa pochodna2 i klasa pochodna pochodnej2.
Tworzę klaseę listę : list <klasa bazowa*> lista;
W niej mam funkcje do wyświetlania jej zawartości:

void Lista::Pokaz()
{
	for (auto it : lista)
	{
		cout << *it << "\n";
	}
	system("PAUSE");
}

Lecz tutaj pojawia się problem. Jak mam dodawać do listy obiekty moich klas pochodnych, a potem je wyświetlać?
Zrobić tak?
 

switch (zmienna)
		{
		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;
		}

Chociaż zdaje mi się że to jest źle.

1 odpowiedź

+2 głosów
odpowiedź 11 maja 2017 przez tangarr Mędrzec (155,180 p.)
wybrane 13 maja 2017 przez Isild
 
Najlepsza
class KlasaBazowa {
public:
    virtual ~KlasaBazowa() {}
    virtual wyswietl() const = 0;
}
class KlasaPochodna1 : public KlasaBazowa {
    virtual wyswietl() const { std::cout << "KlasaPochodna1" << std::endl; }
}
class KlasaPochodna2 : public KlasaBazowa {
    virtual wyswietl() const { std::cout << "KlasaPochodna2" << std::endl; }
}

int main() {
    auto lista = std::list<KlasaBazowa*>();
    lista.push_back(new KlasaPochodna1{});
    lista.push_back(new KlasaPochodna1{});
    lista.push_back(new KlasaPochodna2{});
    for (auto wskaznikNaObiekt : lista) {
        wskaznikNaObiekt->wyswietl();
    }
    std::cin.get();
    return 0;
}

 

komentarz 11 maja 2017 przez Munvik Dyskutant (9,350 p.)
No, zapomniałeś tylko o zwolnieniu pamięci
komentarz 12 maja 2017 przez Isild Użytkownik (620 p.)

A jak by to wyglądało w zapisie takiej klasy?

#include "KlasaBazowa.h"
#include <list>

class KlasaLista
{
protected:
	list <KlasaBazowa*> lista;
public:
       //jakieś tam metody
};

 

Podobne pytania

0 głosów
1 odpowiedź 1,852 wizyt
pytanie zadane 2 kwietnia 2017 w C i C++ przez chacken Użytkownik (820 p.)
0 głosów
2 odpowiedzi 897 wizyt
pytanie zadane 6 stycznia 2017 w C i C++ przez bllackbirrd Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 452 wizyt
pytanie zadane 3 grudnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)

93,457 zapytań

142,453 odpowiedzi

322,722 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...