Defaultwert von Klassenattributen?



  • 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 mit using 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


Anmelden zum Antworten