Initialisierungsliste bei vererbter Klasse



  • Ich habe eine Klasse, c1, in dieser befindet sich im protected Teil ein std::string , nennen wir ihn cTest. So im Konstruktor übergebe ich diesem String in einer Initialisierungsliste einen Wert. Soweit so gut. Nun habe ich eine weitere Klasse c2, die von c1 erbt. Nun soll in deren Konstruktor cTest auch ein Wert zugewiesen werden, dies könnte ich mit einer einfachen Zuweisung erledigen, doch gibt es keinen eleganteren Weg? Ich meine sowas ähnliches wie eine Initialisierungsliste, nur eine solche funktioniert nicht, da der Compiler meckert, dass cTest kein Member der Klasse c2 ist. Wer kann mir weiterhelfen?



  • class A
    {
        protected:
            std::string m_str;
    
        public:
            A(const std::string& str) : m_str(str) {}
    };
    
    class B
    {
        public:
            B(const std::string& str) : A(str) {}
    };
    

    MfG SideWinder



  • Jo daran ist nichts zu meckern doch bei mir sieht es eher so aus:

    class A
    {
          protected:
               std::string m_str;
          public:
               A(): m_str("MUH"){}
    

    Also ich übergebe dem Konstruktor nicht solch einen Konstruktor. Ich könnte das alles in deiner Art und Weise machen, doch interessiert mich, ob es auch eine Möglichkeit bei meinem Code gibt.



  • Nein, entweder du machst einen protected-Konstruktor dem man den String übergeben kann oder du rufst den A-Konstruktor ohne Parameter auf. Aber direkt den String in der Initialisierungsliste an die Basisklasse zu senden geht nur über einen Konstruktor in der Basisklasse.

    MfG SideWinder



  • hi,
    wobei muss man eine initialisierungsliste im konstruktor verwenden? const sachen und referenzen sonst noch was?
    cu



  • Klassen, die keinen Defaultconstructor haben.


Anmelden zum Antworten