我有一个类,它有一个属性,其值取决于其基类的属性。在构造函数中修改此基类属性,以便在修改后需要其值。我试图在这个例子中总结这个想法:
<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
的函数的输入。我担心的是:
答案 0 :(得分:1)
会导致未定义的行为吗?
没有
使用成员初始化列表时,订单已完全定义:按顺序排列第一个基类,然后按顺序排列成员。因此,在您创建任何成员时,将实例化所有基类和所有先前声明的成员。如果在构造函数中切换顺序,编译器应输出警告。
这是完成你想要的好方法吗?
既然你没有告诉我们你将要对这些课程做什么,我不能告诉你它是否是一个好方法,但如果符合你的需要,你可以这样做。< / p>