Frage zu Initialisierungsliste
-
Wie kann ich alle Elemente eines struct initialisieren (auf 0 setzen), wenn diese stuct Elementeiner Klasse ist. Geht das irgendwie per initialisierungsliste?
typedef struct Tiere { int Hunde; int Schweine; int Kühe; } class Zoo { public: Zoo() : meineTiere(0) {} //<----so gehts ja leider nicht Tiere meine_Tiere; }
-
Ja ok man könnte natürlich jedes einzelne Element der struct im Konstruktor auf 0 setzen, nur obs halt auch in der Initliste geht?
Danke
-
Du kannst der struct auch einen Default-Ctor geben. Aber ansonsten sollte
Zoo() : meineTiere() {...}eigentlich dafür ausreichen.
-
Bei hinreichend neuem Compiler reicht letzteres definitiv aus

Erläuterung: Tiere ist ein POD, wird daher standardmäßig wie schon festgestellt garnicht initialisiert. Wenn man eine solche Struktur aber default-initialisiert (also mit leeren Klammern), werden alle Mitglieder rekursiv auch default-initialisiert. Und das bedeutet für alle integralen Typen, dass sie eine in den Zieltyp konvertierte 0 als Wert erhalten.
-
Tatsache. Danke

gibts diesen default Konstruktor für structs auch schon in C? oder nur wenn man mit C++ Compiler übersetzt?
Denn in meinem klugen 1000 seitigen C Buch steht nüscht von Konstruktoren bei structs

-
In C gibt es keine Konstruktoren. Da kann man Objekte auch nicht mit Klammern initialisieren. Aber einen Trick gibt's selbst da:
Tiere meineTiere = { 0 };Bei dieser Initialisierung erhalten alle nicht aufgeführten Elemente auch einen Wert von 0. Leider darf man meines Wissens in C keine leeren Initialisiererklammern angeben, so dass - damit das funktioniert - das erste Strukturelement selbst keine Struktur sein darf.
EDIT:
Siehe CStoll, die Syntaxen für die Initialisierungen sind nicht mit den Begriffen zu vermischen - Default-Initialisierungen an sich gibt es auch in C, aber man kann sie nicht in Fällen erzwingen wo sie nicht vorgesehen ist.
-
Diese Default-Initialisierung gab's auch schon für C - dort wurde sie allerding nur für globale und statische Variablen angewendet.