C'è questo codice:multipla eredità e costruttore di chiamata virtuale di classe di base
#include <iostream>
class Bazowa
{
int x;
public:
Bazowa() : x(55){}
Bazowa(int x_) : x(x_) {}
void fun()
{
std::cout << x << "fun\n";
}
};
class Pochodna1 : virtual public Bazowa
{
public:
Pochodna1() : Bazowa(101) {}
};
class Pochodna2 : virtual public Bazowa
{
public:
Pochodna2() : Bazowa(103) {}
};
class SuperPochodna : public Pochodna1, public Pochodna2
{
public:
SuperPochodna() : {}
};
int main() {
SuperPochodna sp;
sp.fun(); // prints 55fun
return 0;
}
Dopo l'esecuzione di questo programma, verrà stampata "55fun". Cosa è successo alle chiamate del costruttore in classe Pochodna1 e Pochodna2 - vengono ignorate? Perché il membro 'x' della classe Bazowa è impostato su '55', ma non su '101' o '103'?
Il bit pertinente nello standard (nella bozza N3290) è 12.6.2: 10-11, che ha anche un esempio simile a questo. – user450018