不允许继承成员,为什么

Inherited member is not allowed, why?

本文关键字:为什么 成员 继承 不允许      更新时间:2023-10-16

基本问题归结为:

// header
class Calculator 
{
public:
    virtual int calculate(int a, int b);
};
class Adder : public Calculator 
{
};
// class file
int Adder::calculate(int a, int b) {return a + b;} // gives error

为什么不允许我这样做?

我本以为既然Adder继承了Calculator的成员,我就可以把他们的身体定义为自己的身体,但显然这是不可能的......

我已经看到了其他答案,他们只需要在子类中再次编写成员定义,但对我来说,浪费了很多代码行一遍又一遍地重复相同的文本,所以问题是......

为什么我不能在不覆盖子类定义中的情况下执行此操作?

另外,请注意,这不是一个关于如何修复错误的问题,而是一个关于C++机制的问题,以及为什么允许或不允许做某事

不能在类定义之外声明成员函数。 要为类定义的任何方法(无论是重写还是相对于基类隐藏)都必须在类定义中声明。

class Adder : public Calculator { };

定义派生自计算器但不提供其他功能的类。 此外,您可能还打算使计算器::计算方法成为虚拟方法。 您当前(编辑:OP 编辑了使 calculate() 虚拟的问题)隐藏了基类方法,而不是覆盖它。 如果您要处理在运行时实际上可能是 Adder 对象的计算器对象,这是有区别的。

你不能这样做,因为你没有明确说 Adder 有一个计算方法 - C++对此很严格。 如果您随后在单独的源文件中编写计算器::计算,会发生什么?