Warum wird der Standardkonstruktor in der virtuellen Vererbung aufgerufen?

Ich verstehe nicht, warum in dem folgenden code, wenn ich instantiieren eines Objekts vom Typ daughter die Standard - grandmother() Konstruktor aufgerufen wird ?

Dachte ich, dass entweder die grandmother(int) Konstruktor aufgerufen werden soll (Folgen Sie der Spezifikation von meiner mother Konstruktor der Klasse), oder dieser code sollte nicht kompiliert werden, weil der virtuelle Vererbung.

Hier compiler leise ruft grandmother default-Konstruktor in meinem Rücken, während ich nie danach gefragt.

#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);
}

InformationsquelleAutor der Frage Simon Desfarges | 2012-03-28

Schreibe einen Kommentar