从Java/C#背景的虚拟继承,需要一点帮助了解正在发生的事情在这里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)。
非常感谢您的帮助。
你不能在非成员函数中使用'this'。你的'dynamic_cast'将失败,因为'a'不指向'B'对象。 – juanchopanza
你期望''this'在'g()'中引用了什么?至于你的第二个问题,那个构造被称为“成员初始化列表”,并且在构造对象成员时用于提供参数。 – Mankarse
你真的需要解决这个问题。建立一个小的,可编辑的例子,练习你的关注,然后问。 –