为什么纯虚拟机制不考虑继承函数?
在询问之前,我已经提到了这个较老的问题。但我仍然有疑问。
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)
? (该行没有歧义)
没有找到相关结果
已邀请:
5 个回复
广躺椽
[注意:两个using声明可能会引入函数 相同的名称和相同的参数类型。如果,对于不合格的电话 函数名,函数重载决策选择引入的函数 通过这样的使用声明,函数调用是不正确的。 ] 因此,在您提供的示例中,根本没有歧义。根据传递的参数,可以决定对方法的调用。
田眯衅
只允许你使用
方法,但由于
是一个抽象类,你必须实现该类的纯虚函数乐趣才能创建它的对象。
乏摩纶誊伟
机制,那么正常的“虚拟”函数就会存在歧义。 即假设
是正常的虚函数,那么
和
之间会有选择混淆。因此,最好避免考虑至少为
机制的继承成员。
勘掸府迫路
仅调整名称查找过程。它不会将函数导入给定范围,也不会定义新函数。 所以,你只需要定义一个新的
覆盖。
素汞读