struct IA
{
virtual void Init() = 0;
.....
};
struct A : public IA
{
void Init() {};
.....
};
struct B : public A
{
int Init() { return 1; };
};
通过这样的设计我得到错误C2555:'B :: Init':覆盖虚函数返回类型...
我可以以某种方式隐藏A中的Init(),我不想隐藏其他A的功能。 A类从其他地方用作A类,不仅通过B类。
编辑:我需要在层次结构中有两个Init函数,只返回类型不同。 我不需要在B类型的对象上调用A :: Init。 实际上我可以通过
来做到这一点struct B : private A
{
using A::.... // all, except Init
int Init() { return 1; };
};
但是A中有很多功能:(
答案 0 :(得分:1)
由于继承,您的struct B
包含功能签名void Init();
和
int Init();
和C ++不允许重载仅在返回类型上有所不同的方法。
可能不优雅的解决方案:
void Init();
中的struct A
方法声明为私有并将您要继承的其他方法保留为公开来解决此错误。bool
,并使用Init(true)
调用该方法。请注意,您无法为此虚拟参数定义默认值,否则最终会出现相同的错误。