来自 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)。
非常感谢您的帮助。