Initialsierung von (Klassen)Attributen



  • Hey Leute,

    hat es einen tieferen Sinn, dass man in C++ Attribute einer Klasse nicht direkt deklarieren und initialisieren kann, also z.B. so

    class A {
    
      int a = 0;
    
    [...]
    
    };
    

    Weiterhin verstehe ich nicht genau, warum man Klassenvariablen stets im globalen Bereiche initialisieren muss? Hat dies einen tieferen Sinn?

    Danke im voraus und Gruß an alle 🙂


  • Mod

    1. Die Idee dahinter ist die Trennung von Klasse (dem Förmchen) und der Klasseninstanz (dem Plätzchen). Mache dir den Unterschied klar, der ist wichtig. Du verlangst hier, dass das Förmchen festlegt, welche Deko auf das Plätzchen kommt!

    Weiterhin verstehe ich nicht genau, warum man Klassenvariablen stets im globalen Bereiche initialisieren muss?

    Ich habe keine Ahnung, wovon du redest.

    3. In C++11 gibt es dieses Feature:

    class C
    {
     int x=7; 
    public:
     C() {}
    };
    

    entspricht dem C++98 (und natürlich weiterhin richtigem):

    class C
    {
     int x;
    public:
     C() : x(7) {};
    };
    


  • Hallo Sepp,

    ich glaube wir haben uns falsch verstaden 😞

    Was ich bei 1. meinte war folgendes:

    Warum kann man nicht

    class A {
    
      int a = 0;
    
    public:
    
      A(){}
    };
    

    schreiben anstatt

    class A {
    
      int a;
    
    public:
    
      A() : a(0) {}
    };
    

    In Java ist dies z.B. möglich wenn ich mich jetzt nicht irre.

    und bei 2. meinte ich Klassenvariablen also sowas:

    class B {
    
      static int b;
    
    public:
    
      B(){}
    }; 
    
    int B::b=0;
    

    Warum kann man hier nicht direkt sowas schreiben wie

    class B {
    
      static int b = 0;
    
    public:
    
      B(){}
    };
    

    Gruß 🙂


  • Mod

    Beides sollte doch durch meine Antwort doch schon beantwortet sein.

    Das erste darfst du neuerdings, das zweite darfst du bei integralen const Datentypen mit Compilezeitkonstanten sowieso schon, sofern du die Variable auch irgendwo definierst. Ansonsten siehst du hier den Unterschied zwischen einer Deklaration und einer Definition. Nur eine Definition initialisiert, bis auf die genannten besonderen Ausnahmen, die der Faulheit wegen eingeführt wurden*. Was sollte eine Deklaration auch initialisieren? Ihr folgt ja schließlich nicht zwangsläufig eine Definition. Außerdem kann es viele Deklarationen zu einer einzigen Definition geben, welche wäre dann die gültige?

    *: Wie du merkst gelten für diese Ausnahmen eben gerade nicht die Punkte, die ich im folgenden aufzähle, daher sind diese Ausnahmen technisch möglich.



  • Java ist behindert. Hör auf, C++ damit zu vergleichen. Es kotzt mich an.



  • 314159265358979 schrieb:

    Java ist behindert. Hör auf, C++ damit zu vergleichen. Es kotzt mich an.

    Deine Kommentare sind nicht besser als deine Kritik an Java. Werd mal erwachsen.



  • Na wenn du glaubst, dass das eine Kritik ist, bin ich ja beruhigt.


Anmelden zum Antworten