Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 |
void Init() |
Zitat von »"Nexus"«
Übrigens sind Init-Funktionen C-Style. In C++ stellen Konstruktoren in den meisten Fällen die bessere Wahl dar.
Ja, bei einigem Code im Konstruktorrumpf mache ich das natürlich auch so. Ich bezog mich hier auf öffentliche Init-Funktionen.Zitat von »"drakon"«
Aber nur wenn sie public sind. Private verwende ich gerne auch selbst, wenn du z.B mehrere Konstruktoren hast, dann ist das wohl der bessere Weg, als den Code zu duplizieren.
Community-Fossil
Zitat von »"NachoMan"«
nexus was machst du wenn du ein std::vector/array mit objekten hast? dann kannst du dem konstrukor keine werte übergeben. dann muss man wieder mit zeigern arbeiten.(was sich nur bei klassen lohnt, die relativ viel speicher benötigen)
C-/C++-Quelltext |
|
1 2 3 4 5 |
struct foo { foo ( int i ){} }; // kein default ctor! int main () { std::vector<foo> v ( 1000, foo ( 2 ) ); // objekt für Konstruktion angeben } |
Community-Fossil
Warum zuerst dummy-initialisieren, um die Werte gleich wieder zu überschreiben?Zitat von »"NachoMan"«
ja klar, ich benutze konstruktoren um zeiger und variablen auf null bzw. den eigenen wert zu setzen. danach werden der initfunktion die werte übergeben.
Muss man nicht. Man hat etliche Möglichkeiten, den std::vector während der Konstruktion des Objekts zu füllen.Zitat von »"NachoMan"«
bei dem beispiel mit std::vector muss man allen objekten den gleichen wert übergeben. auch nicht das wahre.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 1. Möglichkeit -------------------------------- MyClass::MyClass : MyVector() { MyVector.push_back(X); MyVector.push_back(Y); } // 2. Möglichkeit -------------------------------- std::vector<XY> CreateVector(); MyClass::MyClass : MyVector(CreateVector()) { } // 3. Möglichkeit -------------------------------- void FillVector(std::vector<XY>& Vector); MyClass::MyClass : MyVector() { FillVector(MyVector); } |
Werbeanzeige