在某些代码中重写方法的方法是什么?

问题描述 投票:-2回答:1

假设我们有以下代码:

 class Base
    {
    public:
    virtual void foo() const 
    { cout << "In Base::foo\n"; }
    }

    class Derived : public Base
    {public:
    virtual void foo() 
    { cout << "In Derived::foo\n"; }
    }

    void main()
    {
     Base* b = new Derived();
     b->foo();
     delete b;
    }

它将给我们以下输出:In Base::foo

现在假设我想 - 不改变主函数 - 得到以下输出而不是上面给出的输出:

In Derived::foo

据我所知,我应该覆盖基类中的函数foo(),以获取继承类中的方法foo()的输出,该类是“派生”类。但问题是,在那种情况下我不能使用命令override,因为基础中的方法被定义为常量,而在其他类中则不是。

那么,如果那么覆盖那个方法我该怎么办?

c++ override
1个回答
0
投票

为了覆盖基类的函数void foo() const,必须在派生类中声明函数void foo() const。你已经声明了函数void foo()(注意缺少const),它不会覆盖基类中的函数,因为它有不同的声明。

那么,如果那么覆盖那个方法我该怎么办?

添加缺少的const限定符。


附:你的程序中很少有其他错误:

  • main必须返回int
  • 类定义必须以分号结尾。
  • 通过指向base的指针删除派生对象具有未定义的行为,除非基础的析构函数是虚拟的。
© www.soinside.com 2019 - 2024. All rights reserved.