vector per Konstruktor an abstracte Klasse übergeben

Krikus

Mitglied
Hi,

ich möchte gerne einen vector an eine abstracte per Konstrucktor übergeben.
Innerhalb der Abstracten Klasse, möchte ich dann den Inhalt des Vectors ausgeben.
Allerdings stimmt damit etwas noch nicht. In der Abstracten Klasse kann ich nichtauf den Inhalt zugreifen.

Hier einmal der Code:

C++:
class klasse_test: public basis_klasse
{	
private:
	vector<string> V;
		

public:
	
	klasse_test()//Konstrucktor	
	:basis_klasse(V)
	{
	V.push_back("Inhalt 0"); //0
	V.push_back("Inhalt 1");//1
	V.push_back("Inhalt 2");//2

	};

	void xxx()
	{
	
	}
};

C++:
class basis_klasse
{
private:
	vector<string> V;
		
public:
	basis_klasse(vector <string> &A) :V(A){}; 

	virtual void xxx(void)=0;

	void menue(void)
	{
		system("cls");
		cout <<V[0]<<endl<<endl;

	}

};

Der Aufruf in der Main erfolgt so:

C++:
klasse_test xxx;
basis_klasse *test2;
test2= &xxx;
test2->menue( );
 
Hi.

Das Problem ist, dass natürlich zuerst der Konstruktor der Basisklasse aufgerufen wird bevor der Konstruktor der abgeleiteten Klasse ausgeführt wird. Da du einen leeren Vektor an die Basisklasse übergibst und in der Basisklasse eine Kopie des (leeren) Vektors gespeichert wird, bleibt der Vektor beim Aufruf der menue() Methode natürlich auch leer.

Du hast 2 Möglichkeiten: entweder du speicherst dir eine Referenz auf den übergebenen Vektor in der Basisklasse, oder du deklarierst den Vektor in der Basisklasse als protected und füllst diesen direkt in der abgeleiteten Klasse anstatt nochmal einen Vektor in dieser Klasse zu definieren.

Gruß
 
Hi, ich denke es wird nichts ausgegeben, weil du einen leeren Container übergibst. Wenn du da was sehen willst muss deine abgeleitete Klasse ebenfalls einen Konstruktor mit einem Vektor als Parameter bereitstellen. So wie es jetzt ist, wird ein leerer Vektor von der test_klasse an die Basisklasse übergeben.

mfg
 
Stimmt da hab ich garnicht dran gedacht, dass zuerst der Konstrucktor der Basisklasse aufgerufen wird.

@deepthroat
Ich hab deinen 2 Vorschlag mit protected einmal umgesetzt.
Sind ja nur 2 Zeilen zuändern.
 
Zurück