Je ne comprends pas pourquoi dans le code suivant, quand je l'instancier un objet de type daughter
, la valeur par défaut grandmother()
constructeur est appelé ?
Je pensais que soit l' grandmother(int)
constructeur devrait être appelé (à suivre le cahier des charges de mon mother
le constructeur de la classe), ou de ce code ne compile pas du tout à cause de l'héritage virtuel.
Ici compilateur silencieusement appels grandmother
constructeur par défaut dans mon dos, alors que je n'ai jamais demandé ça.
#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);
}