Java/C# のバックグラウンドを持っているので、C++ で何が起こっているのかを理解するのに少し助けが必要です...
class A {
int x;
public:
A(int x) : x(x){}
void f(int y) {
cout << x + y << endl;
}
};
class B : virtual A {
int x;
public:
B(int x) : A(2*x), x(x) {}
virtual void f(int y){
cout << x + 2*y << endl;
}
};
void h(){
B b(5);
A &a = dynamic_cast<A &>(b);
a.f(10);
b.f
}
void g() {
A *a = this;
a->f(10);
B *b = dynamic_cast<B *>(a);
b->f(10);
}
h() の呼び出しは問題ありませんが、g() の呼び出しは機能しません。誰かが理由を説明できますか?また、行 A(int x) : x(x){} では : x(x){} は何をしますか? B(int x) : A(2*x), x(x) および : A(2*x), x(x) についても同じ質問です。
ご協力いただきありがとうございます。