在问之前,我已经参考了这个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