Ich verstehe nicht, warum im folgenden Code, wenn ich ein Objekt vom Typ instanziiere daughter
, der Standardkonstruktor grandmother()
aufgerufen wird.
Ich dachte, dass entweder der grandmother(int)
Konstruktor aufgerufen werden sollte (um der Spezifikation meines mother
Klassenkonstruktors zu folgen ), oder dass dieser Code wegen der virtuellen Vererbung überhaupt nicht kompiliert werden sollte.
Hier ruft der Compiler stillschweigend den grandmother
Standardkonstruktor in meinem Rücken auf, während ich nie danach gefragt habe.
#include <iostream>
class grandmother {
public:
grandmother() {
std::cout << "grandmother (default)" << std::endl;
}
grandmother(int attr) {
std::cout << "grandmother: " << attr << std::endl;
}
};
class mother: virtual public grandmother {
public:
mother(int attr) : grandmother(attr) {
std::cout << "mother: " << attr << std::endl;
}
};
class daughter: virtual public mother {
public:
daughter(int attr) : mother(attr) {
std::cout << "daughter: " << attr << std::endl;
}
};
int main() {
daughter x(0);
}