6
このコードがあります:このプログラムの実行後基底クラスの複数の仮想継承とコンストラクタ呼び出し
#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;
}
は、それが「55fun」を出力します。 Pochodna1とPochodna2クラスのコンストラクタ呼び出しで何が起こったのですか?無視されますか? Bazowaクラスのメンバー 'x'が '55'に設定されていて、 '101'や '103'に設定されていないのはなぜですか?
標準の関連ビット(ドラフトN3290)は12.6.2:10-11であり、これにもこのような例があります。 – user450018