const-MemberVariablen einer Klasse



  • Hallo,

    warum darf ich eigentlich innerhalb einer Klasse keine reinen const-Member haben? Es geht ja irgendwie nur so etwas wie

    static const int tralala;
    

    Was ist der Grund dafür?



  • Du müsstest die const -Variable für jedes Object initialisieren

    class MyClass {
      private:
        const int MyConst;
    
      public:
        MyClass() : MyConst(IrgendEinWert) {}
    };
    

    Das liegt einfach daran, dass eine const-Variable einen Wert erhält, der nie wieder geändert wird.



  • Hallo,

    vielen Dank für die rasche Antwort. D.h. ich muss das dann auch in meiner Klasse direkt initialisieren, oder? Also in etwa so:

    static const int fritz = 1000;
    

    Folglich wird der Compiler es mir mit einem Error quittieren, wenn ich versuche die Variable fritz in der Initialisierungsliste eines Konstruktors oder in einem Konstruktor selbst zu initialisieren? Wenn ich jetzt ein array von Klassen hätten, die diese Variable enthalten, dann wird nur EINMAL Speicher dafür reserviert, oder?

    Dann hätte ich noch eine generelle Frage zu Initialisierungslisten. Und zwar habe ich eine Klasse, die ganz grob so aufgebaut ist:

    class CMyChild : public CMyBase
    {
    private: 
      static const int fritz = 1000; 
      int hans;
      int myArray[50];
      int* const pMyArray; /*constant pointer*/
    
    public:
      CUserListenerAdministration(void);
      ~CUserListenerAdministration(void);
    };
    

    Hier der Konstruktor der Klasse:

    CMyChild::CMyChild()
    : CMyBase()
    , hans(0)
    //, myArray(0)
    , paUserClients(userClients)
    {
    }
    

    Ich bin mir jetzt ganz unsicher, ob das so überhaupt funktionieren kann, also ich habe gleich mehrere Probleme, ich fang am besten oben an. Aaaalso, mit
    :CMyBase() sage ich ja, dass ich den Parameterlosten Default-Konstruktor der Klasse CMyBase beim instanziieren der Klasse CMyChild verwenden möchte. Mit
    , hans(0) initialisiere ich den Integer-Hans mit 0. Nun würde ich gerne alle Elemente des Arrays myArray auch definiert auf 0 setzen. Wie ist denn für so etwas die Syntax? Weil so wie es da steht murrt der Compiler.

    Und dann wäre ja noch der konstante Pointer. Also was ich eigentlich möchte ist, dass ich in meiner Klasse einen Pointer habe der IMMER auf das nullte Element des Arrays myArray zeigt. Ob das jetzt sinnvoll ist oder nicht sei dahingestellt, denn ich weiß natürlich dass der Name myArray bereits ein konstanter Pointer auf das nullte Element ist. Dennoch müsste es ja eigentlich möglich sein pMyArray so zu verwenden wie ich es beschrieben habe, oder?

    Was wäre denn, wenn ich in der Klasse noch ein array von Strukturen haben, die einen int und einen pointer auf ein char-array enthalten? Kann man so etwas mehr oder weniger komplexes auch in der Initialisierungsliste definiert auf null setzen?

    Ich muss vielleicht dazu sagen, dass ich noch nicht allzu viel mit C++ gemacht habe, deshalb bitte ich evtl. "dumme" Fragen zu entschuldigen.

    Danke schon mal im Voraus.



  • *hochschieb*


Log in to reply