基本问题归结为:

// 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 { };

定义一个派生自Calculator的类,但不提供其他功能。您也可能打算将Calculator::calculate方法设为虚拟。您当前(编辑:OP编辑了使virtual()虚拟化的问题)隐藏了基类方法,而不是覆盖它。如果您要在运行时处理实际上可能是Adder对象的Calculator对象,则将有所不同。

关于c++ - 不允许继承成员,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20915178/

10-11 23:12
查看更多