konstruktor in vererbter klasse der const in oberklasse initialisiert



  • Hallo,
    ich komm hier einfach nich weiter..
    also ich hab ne oberklasse, z.B.:

    class A{
        private:    //meinetwegen auch protected wenns dann leichter geht
            const int id;
            const sting name;
    };
    

    und eine vererbte klasse:

    class B : public A {
        private:
            const int colour;
            int number;
    };
    

    so. und nun will ich mit nem konstruktor eine instanz von class B erzeugen und id, name, colour und number werte zuweisen.
    brauch ich dann noch nen konstruktor für klasse A den ich dann in B mitaufruf?
    schon mal danke
    riddy



  • Hi,

    so sieht das ganze aus, hoffe mal der Code ist selbsterklärend. Da Konstanten keine modifizierbaren Lvalues sind, kann man sie nur initalisieren. Dabei hilft dir der Elementinitalisierer des Konstruktors:

    class A{
        public:
            A(int a) : id(a) : name("blub") { }
        private:   
            const int id;
            const sting name;
    };
    
    class B : public A {
        public:
            B(int n, int c, int a) : A(a), colour(c), number(n) { }
        private:
            const int colour;
            int number;
    };
    


  • super danke, werd ich gleich versuchen



  • jipi das tut jetzt. bin da seit über ner stunde dran...
    vielleicht kannst du mir auch noch beantworten, wie ich das mach, wenn ich anstatt int number, ein array int number[4] hab.
    ich würde dem konstruktor dann halt mehrere int werte übergeben und dann

    number[0](erster_int_wert)

    übergeben aber das geht wohl nicht...



  • achja und das array soll auch const sein, sonst köönt ichs ja auch in den geschweiften klammern zuordnen..



  • Da siehts dann ganz schlecht aus. Entweder du übergibst auch nen Array an deine C'tor oder wenn du lieber dabei bleiben willst, vier einzelne ints zu übergeben, musst du wohl oder übel diese im Konstruktorrumpf einzeln zuweisen.



  • wie kann ich dem c'tor nen array übergeben? mit pointer? und wie geb ich des dann beim erstellen der instanz ein?
    blödblöd ^^



  • Mit const wird das ganze was kniffliger. Wenn das Array für alle Instanzen der Klasse gleich ist kannst du es static const machen und außerhalb der Klasse ganz normal definieren.
    Wenn nicht, dann übergibst du per Zeiger die Adresse eines anderen Arrays.

    Erwäge auch die Benutzung von std::vector<int>.


Anmelden zum Antworten