仮想基本クラスがどのように機能するかについて少し混乱しています。特に、基本クラスのコンストラクターがどのように呼び出されるのか疑問に思っていました。私はそれを理解するために例を書きました:
#include <cstdio>
#include <string>
using std::string;
struct A{
string s;
A() {}
A(string t): s(t) {}
};
struct B: virtual public A{
B(): A("B"){}
};
struct C: virtual public A {};
struct D: public B, public C {};
struct E: public C, public B {};
struct F: public B {};
int main(){
D d;
printf("\"%s\"\n",d.s.c_str());
E e;
printf("\"%s\"\n",e.s.c_str());
F f;
printf("\"%s\"\n",f.s.c_str());
B b;
printf("\"%s\"\n",b.s.c_str());
}
どの出力
""
""
""
"B"
最初の 2 つのケースでは何が起こるかわかりませんでしたが、少なくとも 3 番目のケースでは、出力が「B」になると予想していました。だから今、私はただ混乱しています。A のコンストラクターがどのように呼び出されるかを理解するためのルールは何ですか?