c++ - 不允许继承成员,为什么?

标签 c++ class inheritance

<分区>

基本问题归结为:

// 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::calculate 方法设为虚拟。您目前(编辑:OP 编辑​​了使 calculate() 虚拟的问题)隐藏基类方法,而不是覆盖它。如果您要处理在运行时实际上可能是 Adder 对象的 Calculator 对象,这会有所不同。

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

相关文章:

C++多级继承函数调用

c++ - gsl_interp_linear 的插值错误

java - 类及其实例是什么意思? (java)

c# - 在个人类别中表示性别

swift - 快速重载 'class func'

c# - 如何引用泛型类的所有实例?

c++ - 在 C : Will alignment break my neck? 中伪造继承

c++ - 燕麦++ : put DTO in a list of DTOs

java - native a方法中的参数传递

c++ - 使用索引技巧初始化多维数组