与基类不同的返回类型的C 覆盖功能
C++ Overriding function with different return type than in base class
可能的重复:
当覆盖C 中的虚拟函数时,可以更改返回类型吗?
我遇到了错误:
error: conflicting return type specified for âvirtual bool D::Show()
7: error: overriding âvirtual void A::Show()"
当我编译代码时。代码是:
class A
{
public:
virtual void Show()
{
std::cout<<"n Class A Shown";
}
};
class B : public A
{
public:
void Show(int i)
{
std::cout<<"n Class B Shown";
}
};
class C
{
public:
virtual bool Show()=0;
};
class D :public C, public B
{
public:
bool Show(){
std::cout<<"n child Shown";
return true;}
};
int main()
{
D d;
d.Show();
return 0;
}
我想从Class C中使用Show()函数。我的错误在哪里?
您的编译器正在抱怨,因为这两个函数没有相同的返回类型:其中一个返回void
,另一个返回bool
。您的两个功能应具有相同的返回类型。
你应该有
class A {
public:
virtual bool Show() {
std::cout<<"n Class A Shown";
return true; // You then ignore this return value
}
};
class B : public A {
public:
bool Show(int i) {
std::cout<<"n Class B Shown";
return true; // You then ignore this return value
}
};
如果您不能更改类A
和B
,则可以将C
和D
类更改为void Show()
方法而不是bool Show()
方法。
如果您不能做任何这些事情,则可以在 D
函数内使用B
类型的成员而不是从中继承:
class D : public C {
public:
bool Show() {
std::cout<<"n child Shown";
return true;
}
void ShowB() {
b.Show();
}
private:
B b;
};
您需要添加一个中间人。类似:
class C1 : public C{
public:
virtual bool show(){ /* magic goes here */ }
};
class D: public C1, public B{
....
要致电表演,您将需要类似的东西: static_cast<C&>(c).Show();
相关文章:
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 矢量被push_back功能覆盖
- 为什么我无法覆盖虚拟功能?
- 是否可以在 C++03 中实现类似"覆盖"的功能
- 覆盖私有功能,它与受保护功能有何不同?
- 带有抽象类的覆盖模板功能
- 覆盖私人功能
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- C++向下转换以撤消功能覆盖
- 每个实例C 的覆盖功能
- SVML的覆盖功能调用
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 是否有可能覆盖全局实现的功能
- 覆盖功能的异常规范比基本版本更宽松
- 与基类不同的返回类型的C 覆盖功能
- C++中的覆盖功能
- C++覆盖功能
- 构建和使用包含覆盖功能的pnacl-compiler-rt
- 纯虚拟和覆盖功能(c++)