首页 > 解决方案 > C++中的继承和构造函数定义

问题描述

我有一个基类和派生类:

class Neuron 
{
    protected:
        double input;
        double output;
};

class InputNeuron : public Neuron
{
    public:
        InputNeuron();
};

派生类的默认构造函数定义如下

InputNeuron::InputNeuron() : input(0.0), output(0.0) {}

问题是:输入输出初始化错误。

我的目标是从继承中受益,以避免在派生类中重新声明输入和输出。但是,在当前状态下,使用这些成员会引发一条消息:input is not a nonstatic data member or base class of class InputNeuron我似乎无法从中获取信息。

标签: c++inheritancedefault-constructor

解决方案


类构造函数只能初始化类的(直接)数据成员;它不初始化基类数据成员。相反,您需要为此使用基类构造函数。您将需要首先定义一个适当的基本构造函数。如果您只想派生类使用它,请使其protected

class Neuron 
{
    protected:
        Neuron(double i, double o) : input(i), output(o) {}
    private:
        double input;
        double output;
};

class InputNeuron : public Neuron
{
    public:
        InputNeuron() : Neuron(0, 0) {}
        //              ^^^^^^^^^^^^
};

(您可以保留受保护的基本数据成员,然后在派生构造函数的主体中分配给它们,但这不是一种好的方式,因为最好立即使用它们的预期值初始化变量。)


推荐阅读