【问题标题】:Passing child variable to parent constructor将子变量传递给父构造函数
【发布时间】:2020-01-16 12:08:43
【问题描述】:

我正在尝试将一个变量从父类传递给它的子类。 代码确实可以编译,但一直给我结果; 0。 当我在子类的基构造函数中硬编码值时,它确实给了我想要的结果。

父类.h:

class Parent{
 float price;

public:
 Parent(float price)
}

父类.cpp:

 #include "Parent.h"

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

子类.h:

 class Child : Parent{
 const float price = 0.29;

 public:
 Child();
 }

子类.cpp:

#include "Child.h"

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

如何才能使子类中的 var 可以在基类的构造函数中使用?

【问题讨论】:

标签: c++ class constructor


【解决方案1】:

注意initialization order 是:

列表中成员初始化器的顺序无关:实际 初始化顺序如下:

...

  • 2) 然后,直接基类按照从左到右的顺序初始化,因为它们出现在此类的基说明符列表中

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

...

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

【讨论】:

  • 这很有道理,我怎样才能在我的解决方案中实现这一点?
  • @MrEmper 作为解决方法,您可以直接传递0.29,或者如果所有实例的值相同,则将其设为static,然后您可以使用它传递给@ 的构造函数987654326@.
【解决方案2】:

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

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

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

此代码将按预期工作。

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多