Funkcja wirtualna wypisująca odpowiedni komunikat dla poszczególnych klas

0

Witam,
mam za zadanie stworzyć funkcję wirtualną która po wywołaniu wypisze odpowiedni komunikat dla poszczególnych klas, w tym przypadku Kwadrat i Okrąg.
Program kompiluje się, nie pokazuje błędów, ale problem polega na tym że gdy go uruchomię przestaje działać.

#include<iostream>

using namespace std;

class Figura{
	public:
		virtual void Rysuj() = 0;
		
		~Figura(){
			cout << "Destruktor Figura." << endl;
		}
	
};


class Kwadrat : public Figura{
	public:
		virtual void Rysuj(){
		//	Figura :: Rysuj();
			cout << "Rysuje kwadrat." << endl;
		}
	
		~Kwadrat(){
			cout << "Destruktor Kwadrat." << endl;			
		}
	
};

class Okrag : public Figura{
	public:
		virtual void Rysuj(){
		//	Figura :: Rysuj();
			cout << "Rysuje okrag." << endl;
		}
	
		~Okrag(){
			cout << "Destruktor Okrag." << endl;
		}
	
};

class Figury{
	public:
		int i;
		Figura *tab[];
		
		void Dodaj_figure(Figura *f){
			tab[i] = f;
			i++;
		}
		
		void Rysuj_Q(){
			while(i > 0){
				tab[i-1] -> Rysuj();
				i--;
			}
		}

		~Figury(){
			cout << "Destruktor Figury." << endl;
		}
	
};

int main(){
		
	Kwadrat kw1;
	Okrag okr1;
	Kwadrat kw2;
	
	Figury fig;
	
	fig.i = 0;
	
	fig.Dodaj_figure(&kw1);
	fig.Dodaj_figure(&okr1);
	fig.Dodaj_figure(&kw2);
	
	cout << fig.i << endl;
	
	fig.Rysuj_Q();

	return 0;	
}


Gdy wrzuciłem wywołanie funkcji Rysuj_Q do komentarza zadziałał, więc to pewnie tu leży problem, proszę o pomoc.

2

Nie masz zaalokowanej pamięci dla tab. Zrób sobie Figura *tab[3];, albo, lepiej vector<Figura*>

0

Dziękuję, pierwsza podpowiedź pomogła i podziałało. Nie rozumiem tylko co oznacza ten

vector

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