Defaultwert von Klassenattributen?
-
Seikilos schrieb:
Nein, ich habe viele Klassen, mit vielen Vars und die sind nicht von mir
Dann hat der Ersteller dieser Klassen also keine Sekunde an den Gedanken verschwendet, einen richtigen Konstruktor zu schreiben?
-
Wenn man die Umstände von vor 15 Jahren und das Detail bedenkt, dass es c Structs sind...nein
-
C-Structs die keine Funktionen haben, also keine "per-default-.public-klassen" sind, kannst du bedenkenlos mit memset(ptr, 0, sizeof(x)) initialisieren.
mfg
-
Warum macht ihr es so kompliziert? Null-Initialisierung von Strukturen in C geht wie folgt:
struct Foo f = { 0 };
-
Oder in C++ einfach:
Foo f = {};
-
Bekomme bei beiden ein:
Error 1 error C2552: 'foo' : non-aggregates cannot be initialized with initializer list.Wenn ein struct von nem struct erbt geht es nicht mehr, richtig?
Vom base struct kann ich es allerdings so machen. Cool
Danke
-
Ja, genau. Funktioniert nur mit C-style structs. Also nix mit Vererbung.
Ist aber auch nicht nötig, denn wenn Du selbst eine struct erbst, kannst Du auch einen vernünftigen Konstruktor schreiben.
-
LordJaxom schrieb:
Ja, genau. Funktioniert nur mit C-style structs. Also nix mit Vererbung.
Ist aber auch nicht nötig, denn wenn Du selbst eine struct erbst, kannst Du auch einen vernünftigen Konstruktor schreiben.
Wahrscheinlich ist aber die Vererbung auch schon so vorgegeben....
Tja - mal wieder ein Beispiel, warum gutes Design wichtig ist (bzw. gewesen wäre).
Gruß,
Simon2.
-
Öhm, Wenn A von B erbt und ich eine Instanz von A habe,wie komme ich dann an das base struct B und deren Typen?
Von mir aus auch im ctor von A
-
Seikilos schrieb:
Öhm, Wenn A von B erbt und ich eine Instanz von A habe,wie komme ich dann an das base struct B und deren Typen?
Ähm, vielleicht wie bei Membern von
A
? Die vererbte Klasse enthält die Basisklasse als Teil. Explizit (z.B. bei Mehrdeutigkeiten benötigt) könntest du es mitusing
lösen.
-
Naja, wenn die Klassen so aussehen:
struct B { int i; }; struct A : public struct B { A(){ B = {}; }; }; // Oder struct A : public struct B { A(): B({}) {} };
Dann krieg ich es nicht geregelt, weder in der Init liste, noch so
-
Seikilos schrieb:
Dann krieg ich es nicht geregelt, weder in der Init liste, noch so
Da scheinst du aber nicht lange ausprobiert zu haben.
struct Base { int x; int y; }; struct Derived : public Base { Derived() : Base() { } };
-
Ach verflucht, das war mir nicht klar, ich dachte leere Klammern würden nichts bringen