【发布时间】:2016-04-30 02:53:57
【问题描述】:
子类“RandomUniform”中的构造函数旨在如果创建的对象变得统一,则重新初始化母类“RandomVar”的成员“mean”和“sigma”。但我得到错误:意思是,sigma“不是非静态数据成员或基类”。据我了解,在基类中声明的所有成员都必须在子类中作为静态成员重新声明和重建(重新初始化)(与变量“uplimit”和“downlimit”没有区别),这是继承的最佳理念。那么问题出在哪里?
这是我找到的最佳答案:c++ Child class Unable to initialize Base class's member variable? 但是“这是因为基类(以及它的所有数据成员)在派生类及其任何成员之前初始化”这句话对我来说并不清楚。构造函数不是用来重新初始化变量,即使之前已经完成了吗?
PS:我使用符号 RandomVar::RandomVar() 作为下面的代码来准确显示方法是如何写入 cpp 文件的。
class RandomVar{
public:
double mean;
double sigma;
RandomVar();
virtual ~RandomVar();
};
RandomVar::RandomVar() : mean(0), sigma(1) {
}
RandomVar :: ~RandomVar(){
}
class RandUniform: public RandomVar {
protected:
double downlimit;
double uplimit;
public:
RandUniform();
virtual ~RandUniform();
};
RandUniform::RandUniform() : downlimit(0), uplimit(1), mean(0.5), sigma (sqrt(1/12)) {
}
RandUniform :: ~RandUniform(){
}
【问题讨论】:
标签: c++ inheritance constructor initialization virtual