C++ 使用父类clode实现纯虚函数
在下面的简化示例中,我尝试使用已经存在的父级实现(从接口)实现一个函数。 我想知道是否有人能解释为什么这不起作用,是否有一个简单的解决办法C++ 使用父类clode实现纯虚函数,c++,C++,在下面的简化示例中,我尝试使用已经存在的父级实现(从接口)实现一个函数。 我想知道是否有人能解释为什么这不起作用,是否有一个简单的解决办法 using namespace std; struct IInterface { virtual void vFunction () = 0; }; struct Base { void vFunction () { } }; struct A: public Base, public IInterface { using Base::vF
using namespace std;
struct IInterface
{
virtual void vFunction () = 0;
};
struct Base
{
void vFunction () { }
};
struct A: public Base, public IInterface
{
using Base::vFunction;
//virtual void vFunction() { Base::vFunction(); } // Is this the only way to reuse Base code?
};
int main ()
{
A a;
IInterface *pInterface = &a;
a.vFunction();
pInterface->vFunction();
return 0;
}
错误是:
main.cpp: In function 'int main()':
main.cpp:21:9: error: cannot declare variable 'a' to be of abstract type 'A'
A a;
^
main.cpp:13:12: note: because the following virtual functions are pure within 'A':
struct A: public Base, public IInterface
^
main.cpp:5:20: note: virtual void IInterface::vFunction()
virtual void vFunction () = 0;
^
base
中的vFunction
与i界面中的vFunction
没有关系。正因为如此,编译器无法自动使用其中一个来代替另一个。您的转发代码是实现此目的的唯一方法。您已经有了解决方案,还需要什么?您已经在下面的一条评论中回答了自己的问题!实际上另一个更好的方法是,Base
从IInterface
@Slava继承。这里没有任何论据,但我想,OP有理由不这么做。我几乎看不到任何理由。@Slava我相信,问题应该从表面上看,除非它们没有意义。可以想象,OP有一个第三方类,该类实现其接口的一些功能并希望使用它们。第三方类有一个方法,其签名保证与IInterface
中的签名匹配。你是认真的吗?