可以在初始化列表中使用基类属性吗?

时间:2016-02-08 01:55:34

标签: c++

我有一个类,它有一个属性,其值取决于其基类的属性。在构造函数中修改此基类属性,以便在修改后需要其值。我试图在这个例子中总结这个想法:

<access origin="*" />
<allow-intent href="*" />
<allow-navigation href="*" />

我正在使用#include <string> #include <iostream> class A { public: int att_a; A(int x) : att_a(x) { att_a++; }; // att_a is being modified in the constructor of A }; class B : public A { public: std::string att_b; // att_b is from a different type than att_a but its value is obtained from att_a B(int y) : A(y), att_b(std::to_string(att_a)) {}; }; int main(int argc, char const *argv[]) { B b = B(3); std::cout << b.att_b << std::endl; return 0; } 中的属性att_a,该属性在构造过程中被修改,作为初始化class A att_b的函数的输入。我担心的是:

  • 这是完成我想要的好方法吗?
  • 即使它编译并运行,在某些情况下是否会导致未定义的行为?

1 个答案:

答案 0 :(得分:1)

  • 会导致未定义的行为吗?

    没有

    使用成员初始化列表时,订单已完全定义:按顺序排列第一个基类,然后按顺序排列成员。因此,在您创建任何成员时,将实例化所有基类和所有先前声明的成员。如果在构造函数中切换顺序,编译器应输出警告。

  • 这是完成你想要的好方法吗?

    既然你没有告诉我们你将要对这些课程做什么,我不能告诉你它是否是一个好方法,但如果符合你的需要,你可以这样做。< / p>