c++ - 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
我似乎无法从中获取信息。
解决方案
类构造函数只能初始化类的(直接)数据成员;它不初始化基类数据成员。相反,您需要为此使用基类构造函数。您将需要首先定义一个适当的基本构造函数。如果您只想派生类使用它,请使其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) {}
// ^^^^^^^^^^^^
};
(您也可以保留受保护的基本数据成员,然后在派生构造函数的主体中分配给它们,但这不是一种好的方式,因为最好立即使用它们的预期值初始化变量。)
推荐阅读
- powerbi - How to add 2 columns in Power BI measures using filters on min date?
- css - 过滤器的滞后峰值:仅 Chrome 中的 drop-shadow()
- python - 有没有办法在删除之前删除所有已编辑的消息?
- android - AutocompleteFragment 结果返回具有空属性的位置
- java - 滚动时如何防止`RecyclerView`重复?
- sql-server - 如何在 SQL Server 中以最有效的方式确定计数是否大于阈值?
- node.js - NodeJS Child Process stdout 不存在,但在终端中执行命令时工作正常
- python-3.x - Scrapy 每 5 分钟将统计信息发送到作为参数作为 POST 请求传递的 URL
- sql - 如何授予对表“SHC.ABC”的公共同义词“SHC.ABC”的“选择”权限
- apache-spark - 如何从火花历史服务器获取火花执行器日志?(mesos 客户端模式下的 spark)