将子变量传递给父构造函数

时间:2019-09-15 11:11:40

标签: c++ class constructor

我正在尝试将变量从父类传递到其子类。 该代码可以编译,但是一直在给我结果。 0。 当我在子类内的基本构造函数中对值进行硬编码时,确实会得到所需的结果。

父类。h:

class Parent{
 float price;

public:
 Parent(float price)
}

父类。cpp:

 #include "Parent.h"

 Parent::Parent(float price){
 this->price = price;
 }

Child class.h:

 class Child : Parent{
 const float price = 0.29;

 public:
 Child();
 }

Child class.cpp:

#include "Child.h"

Child::Child() : Parent(price){
}

如何做到这一点,以便子类内部的var可以在基类的构造函数中使用?

2 个答案:

答案 0 :(得分:3)

请注意,initialization order是:

  

列表中成员初始值设定项的顺序无关紧要:实际   初始化顺序如下:

     

...

     
      
  • 2)然后,直接基类按照出现在此类的基类指定符列表中的顺序从左到右进行初始化

  •   
  • 3)然后,按照类定义中的声明顺序初始化非静态数据成员。

  •   
     

...

总是在数据成员之前初始化基础子对象;这意味着当您尝试将数据成员Child::price传递给基类Parent的构造函数时,它尚未初始化。

答案 1 :(得分:0)

如果您不介意使用static,则可以执行以下操作:

// Child.h
class Child : Parent {
    static const float price;

 public:
    Child();
};
// Child.cpp
const float Child::price = 0.29;

此代码将按预期工作。