C++覆盖函数,返回类型不同于基类

1 c++ inheritance overriding

可能重复:
在C++中覆盖虚函数时可以更改返回类型吗?

我收到错误:

error: conflicting return type specified for âvirtual bool D::Show()
7: error: overriding âvirtual void A::Show()"
Run Code Online (Sandbox Code Playgroud)

当我编译我的代码.代码是:

class A
{
       public:  
       virtual void Show()
       {
        std::cout<<"\n Class A Show\n";
       }
};

class B :  public A
{
    public:
    void Show(int i)
    {
            std::cout<<"\n Class B Show\n";
    }
};

class C
{
    public:
    virtual bool Show()=0;
};

class D :public C, public B
{
    public:
        bool Show(){
            std::cout<<"\n child Show\n";
            return true;}
};

int main()
{
    D d;
    d.Show();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想使用C语言中的Show()函数.我的错误在哪里?

ale*_*nis 6

您的编译器抱怨,因为这两个函数没有相同的返回类型:其中一个返回a void而另一个返回a bool.您的两个函数应具有相同的返回类型.

你应该有

class A {
   public:  
   virtual bool Show() {
      std::cout<<"\n Class A Show\n";
      return true; // You then ignore this return value
   }
};

class B :  public A {
   public:
   bool Show(int i) {
      std::cout<<"\n Class B Show\n";
      return true; // You then ignore this return value
   }
};
Run Code Online (Sandbox Code Playgroud)

如果你不能改变类AB,您可以更改类CD有一个void Show()方法,而不是一个bool Show()方法.

如果你不能做任何这些事情,你可以使用组合而不是继承:B在你的D函数中有一个类型的成员而不是继承它:

class D : public C {
public:
    bool Show() {
        std::cout<<"\n child Show\n";
        return true;
    }
    void ShowB() {
        b.Show();
    }

private:
    B b;
};
Run Code Online (Sandbox Code Playgroud)