假设我们有以下代码:
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
,因为基础中的方法被定义为常量,而在其他类中则不是。
那么,如果那么覆盖那个方法我该怎么办?
为了覆盖基类的函数void foo() const
,必须在派生类中声明函数void foo() const
。你已经声明了函数void foo()
(注意缺少const
),它不会覆盖基类中的函数,因为它有不同的声明。
那么,如果那么覆盖那个方法我该怎么办?
添加缺少的const
限定符。
附:你的程序中很少有其他错误:
main
必须返回int
。