übergabe eines vectos an eine Klasse



  • hi.

    ich möchte ein vector an eine klasse übergeben, in der er modifiziert werden soll. diese veränderungen sollen ebenfalls den ursprünglichen vector betreffen. gibt es ausser der unten aufgeführten variante weitere möglichkeiten, diese vector-übergabe zu realisieren?

    class ClassA
    {
    public:
    	ClassA (vector <int> &dat):itsDat(dat)
    	{
    	}
    	int  GDat	(int type)
    	{
    		if (type < itsDat.size())
    			return itsDat[type];
    		return -1;
    	}
    	void MDat	()
    	{
    		int i;
    		for (i=0;i<itsDat.size();i++)
    			itsDat[i] = 0;
    	}
    	int  Size	()
    	{
    		return itsDat.size();
    	}
    private:
    	vector <int> &itsDat;
    };
    
    int main()
    {
    	int i;
    	std::vector <int> dat;
    	ClassA CLASS(dat);
    
    	for (i=0;i<5;i++)
    		dat.push_back(i);
    
    	CLASS.MDat();
    
    	for (i=0;i<dat.size();i++)
    		cout << endl << dat[i];
    	cout << endl;
    	for (i=0;i<CLASS.Size();i++)
    		cout << endl << CLASS.GDat(i);
    
    	_getch();
        return 0;
    }
    


  • stick_thai schrieb:

    ich möchte ein vector an eine klasse übergeben, in der er modifiziert werden soll. diese veränderungen sollen ebenfalls den ursprünglichen vector betreffen.

    Wieso "ebenfalls" und "ursprünglich"? In deinem Code gibt es nur einen einzigen vector, weil du Referenzen benutzt.

    gibt es ausser der unten aufgeführten variante weitere möglichkeiten, diese vector-übergabe zu realisieren?

    Ist das Beispielcode? Wenn die Klasse wirklich nichts anderes tut, dann wäre eine einfache Funktion besser.



  • MFK schrieb:

    Ist das Beispielcode?

    ja klar, in meinem programm sieht das etwas unübersichtlich aus, darum habe ich einen einfachen beispielcode geschrieben.

    anscheinend gibt es also ausser referenzen keine andere möglichkeit, oder? und muss man diese wirklich IMMMER bereits im constructor übergeben?

    DANKE.



  • stick_thai schrieb:

    und muss man diese wirklich IMMMER bereits im constructor übergeben?

    Referenzmember müssen im Konstruktor initialisiert werden.



  • stick_thai schrieb:

    ...

    anscheinend gibt es also ausser referenzen keine andere möglichkeit, oder? ...

    Zwei Alternativen gibt's noch:
    1.) Member notwendig ?
    Ist es wirklich notwendig, dass ClassA dieser Vektor als Memeber zugewiesen ist ? Immerhin bekommt die Klasse gar nicht mit, wenn der vektor außerhalb geändert wird ... sie kann also selbst nicht für irgendeine Datenkonsistenz sorgen. Alternativ kann man bei den entsprechenden Memberfunktionen den Vektor (per Referenz) übergeben. ....

    2.) Zeiger
    ClassA kann statt der Referenz auch einen Zeiger auf den Vektor beinhalten. Den kann man beliebig zuweisen und auch zu Lebenzeiten des ClassA-Objekts auf andere vektoren "umbiegen". (Dazu muß der vector übrigens NICHT auf dem Heap mit new angelegt werden, sondern ein &dat würde reichen...)

    Gruß,

    Simon2.


Anmelden zum Antworten