從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
你真的需要解決這個問題。建立一個小的,可編輯的例子,練習你的關注,然後問。 –