Avatar ·

Regeln für den Aufruf des Basisklassenkonstruktors in C++

Hallo zusammen! Ich habe gerade angefangen, C++ zu lernen, und komme mit den Regeln für den Aufruf des Basisklassenkonstruktors bei der Vererbung nicht klar. Angenommen, ich habe eine einfache Klasse `Animal` und eine Klasse `Dog`, die davon erbt: ```cpp class Animal { public: Animal() { cout << "Animal created\n"; } Animal(string name) : name_(name) { cout << "Animal " << name << " created\n"; } private: string name_; }; class Dog : public Animal { public: Dog() { cout << "Dog created\n"; } Dog(string name) { cout << "Dog " << name << " created\n"; } }; ``` Wenn ich ein `Dog`-Objekt ohne Parameter erstelle, wird der Standardkonstruktor `Animal()` aufgerufen, und das ist logisch. Aber wenn ich `Dog d("Buddy")` schreibe, wird zuerst `Animal()` aufgerufen und dann erst mein Konstruktor `Dog(string name)`. Dadurch bleibt das Feld `name_` in `Animal` leer, obwohl ich den Namen übergebe! Wie kann ich erreichen, dass der Name an die Basisklasse übergeben wird? Und generell, welche Regeln gibt es für den Aufruf des Basisklassenkonstruktors?