在問之前,我已經參考了這個older question。但我仍然有疑問。爲什麼純虛擬機制不考慮繼承函數?
struct B1 {
virtual void fun() = 0;
};
struct B2 {
void fun() { cout<<"B2::fun()\n"; }
void fun (int i) {}
};
struct D : B1, B2 {
using B2::fun; // This line doesn't help
};
int main()
{
B1 *pB1 = new D; // Error: cannot allocate 'D' because 'B1::fun()' is abstract
pB1->fun();
}
- 任何原因C++標準不接受,繼承的成員函數來解決
pure virtual
機制? - 爲什麼
using
關鍵字沒有幫助解決該錯誤? (編譯器:linux-64 g ++) - 哪個函數用於
using
關鍵字,B2::fun()
或B2::fun(int)
? (有該行沒有歧義)
由於B1是虛擬的,所以必須在D中定義方法。或者,您可以使用B2:B1,然後使用D:B2。 – Jess 2011-04-11 05:37:08
@Jess:兩者都可以工作,請檢查RageD的答案,它解釋了它是如何工作的。 – 2011-04-11 05:45:21