Array von Instanzen
-
wobei der letztere Code eher moderne Kunst als gültiges C++ ist.
Mein Vorschlag: verwende std::vector anstelle eines Arrays.
-
HumeSikkins schrieb:
wobei der letztere Code eher moderne Kunst als gültiges C++ ist.
Mein Vorschlag: verwende std::vector anstelle eines Arrays.
jo war wohl eher eine geistige tiefflugphase

-
Erst mal vielen Dank für die schnelle Antwort!!!!
Das bringt mich schon kräftig weiter...Frage zum ersten Code:
Wie kann ich dann mit anderen Methoden von A die Instanzen von B innerhalb des Feldes ansprechen???_array[0].Write(); //z.B. als einfache Bildschrimausgabe mit cout...funktioniert ja jedenfalls nicht!!!!!
Frage zum zweiten Code:
Das lässt sich zumindest bei mir (VS Studio.Net) nicht compilieren!
Meldung: Syntaxfehler '['
-
Da _array ja aus Pointern besteht, mußt du die Elemente für den Zugriff dereferenzieren:
_array[i]->write();(achja, nur der Vollständigkeit halber: zu dem Code sollte auch noch ein Destruktor gehören, der delete auf alle drei Elemente anwendet - und Copy-Konstruktor und operator=() für eine saubere Kopie)
-
OK... jetzt ist alles klar... funktioniert prima
-
Wie schon erwähnt wurde, brauche ich ja auch noch einen Destruktor, der per "delete" alle Instanzen der Klasse B im Feld _array bzw. deren Speicher auf dem Heap löscht!!!!
Kann ich das so machen?
... ~B() {delete *_array;} //inline Destruktor für B ..Wird damit nicht nur das erste Element von _array (also Index 0) gelöscht???
Gruß
MAV
-
... sorry ich hab noch was vergessen:
Mir ist schon klar, dass ich das gesamte Array z.B. mit folgendermaßen löschen könnte.~A() { delete _array[0]; delete _array[1]; delete _array[2]; } //geht natürlich nur wenn B auch einen Destruktor hat!!!!Oder ich könnte das natürlich auch in einer Schelife abrattern, weil es ja in echt mehr als 3 Objekte im Array sein sollen!!
Ich denke aber das müsste auch eleganter gehen, oder???
-
MAV_today schrieb:
//geht natürlich nur wenn B auch einen Destruktor hat!!!!
Musst du auf jeden Fall machen und hat nichts damit zu tun ob B einen Destruktor hat.
Das eleganteste was mir da einfällt ist eine Schleife.
Kurt
-
MAV_today schrieb:
Ich denke aber das müsste auch eleganter gehen, oder???
Ja, nimm statt des Arrays einen vector<B> - der weiß von selber, wie er hinter sich aufräumen muß

class A { vector<B> array; public: A(int p1=0,int p2=0,int p3=0) { array.push_back(B(p1)); array.push_back(B(p2)); array.push_back(B(p3)); } };(dafür benötigst du einen Konstruktor "B::B(int);" - andernfalls mußt du die push_back()-Aufrufe anpassen)
-
Ja, nimm statt des Arrays einen vector<B> - der weiß von selber, wie er hinter sich aufräumen muß
Wobei dir hier die Performance Heini's aufs dach steigen wuerden ^^
vector ist ersatz fuer ein dynamisches Array also was in der art
T * array = new T[X];hab glaub ich was in der "Aufgabenstellung" von einer fixen arraygroesse von 5 gelesen, da waer ich mit nem vector scho wieder vorsichtiger

Wenn performance egal ist, ok, dann soll hinnerher aber auch keiner meckern ...Deshalb die frage, iss die 5 wirklich fix, so fix wie das amen in der kirche ???
Braucht er wirklich nen Array ?
Bei 3D Punktklassen definiert man meist auch 3 unabhaengige variablen und kein Array ^^
Weiterhin fallen so Laute wie "sofort 5 instanzen erstellen im Konstruktor" was eindeutig auf ne composition hindeutet ... ob ich das "dynamisch" machen wuerd ?
Dazu weiss ich aber zu wenig von der aufgabenstellung ^^
Ciao ...