Wyl*_*ich 1 c++ inheritance default-constructor
我有一个基类和派生的基类:
class Neuron
{
protected:
double input;
double output;
};
class InputNeuron : public Neuron
{
public:
InputNeuron();
};
Run Code Online (Sandbox Code Playgroud)
派生类的默认构造函数定义如下
InputNeuron::InputNeuron() : input(0.0), output(0.0) {}
Run Code Online (Sandbox Code Playgroud)
问题是:输入和输出的初始化是错误的.
我的目标是从继承中获益,以避免在派生类中重新声明输入和输出.但是,在当前状态下,使用这些成员会发出一条消息:input is not a nonstatic data member or base class of class InputNeuron消息我似乎无法从中获取信息.
类构造函数只能初始化类的(直接)数据成员; 它不初始化基类数据成员.相反,您需要使用基类构造函数.您需要首先定义适当的基础构造函数.如果您只希望派生类使用它,请将其设置为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) {}
// ^^^^^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)
(您也可以保留受保护的基础数据成员,然后在派生构造函数的主体中分配它们,但这不是好的样式,因为最好立即使用其预期值初始化变量.)