我試圖實現以下類:C++多重和虛擬繼承
class a {
public :
//...
f();
//...
};
class b : virtual public a {
public :
//...
f();
//...
}
class c : virtual public a {
public :
//...
f();
//...
}
class d : virtual public c {
public :
//...
f();
//...
}
class e : public b, public d {
public :
//...
}
但是編譯器告訴我,爲成員函數f()的要求是不明確的。 我想'e'繼承'd'的f()版本(所以'c'),但只有在'e'中重新聲明f()時纔會編譯代碼。所以,我只能編譯如果我如下的代碼「E」的構造函數:
e::e(...) : a(...), c(...), b(...), d(...)
{
}
這似乎不合邏輯對我來說,因爲從「C」「d」 inherate和「b」將首先建造。
+1 - '用d :: F;'是一個不錯的選擇。第三種方法是添加'void f(){d :: f(); }'to'class e' - 在這裏沒有必要,但有時在修改參數時有用,記錄添加等等。 –
這只是因爲我不會不確定編譯器爲什麼要按照特定的順序構建構造函數,因爲,在我看來,b是要先建成的。謝謝你的回答,但我會使用'使用'方法。 – Kernael