No es este código:múltiple virtual de la herencia y el constructor de la clase base llamada
#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;
}
Después de la ejecución de este programa, se imprimirá "55fun". ¿Qué pasó con las llamadas al constructor en la clase Pochodna1 y Pochodna2? ¿Se ignoran? ¿Por qué el miembro 'x' de la clase Bazowa se establece en '55', pero no '101' o '103'?
El bit relevante en el estándar (en el borrador N3290) es 12.6.2: 10-11, que incluso tiene un ejemplo muy parecido a este. – user450018