基本问题归结为:
// 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/