是否可以在初始化列表中使用基类属性
Is it ok to use base class attribute in the initialization list?
我有一个类,它有一个属性,其值取决于其基类中的属性。此基类属性在构造函数中修改,因此我在修改后需要其值。我试图在这个例子中总结这个想法:
#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;
}
我正在使用 class A
中的属性 att_a
,该属性在构造过程中进行了修改,作为初始化class B
att_b
的函数的输入。我担心的是:
- 这是实现我想要的好方法吗?
- 即使它编译并运行,在某些情况下它会导致未定义的行为吗?
-
它会导致未定义的行为吗?
不。
使用成员初始化列表时,顺序是完全定义的:首先是基类的顺序,然后是成员的顺序。因此,在创建任何成员时,将实例化所有基类和所有以前声明的成员。如果在构造函数中切换顺序,编译器应输出警告。
-
这是实现你想要的好方法吗?
由于您没有告诉我们您将如何处理这些课程,因此我无法告诉您这是否是一个好方法,但是如果它符合您的需求,您可以这样做。
相关文章:
- 基类需要派生类属性
- 使用基类的C++和修改私有/受保护的属性
- 子类中具有不同值的静态基类属性
- 即使基类属性在完成向下转换时是虚拟的,是否有效
- 继承:派生类的基类属性可访问性
- 通过"a pointer of the base class"访问未在基类中声明的子类的方法或属性(动态)
- 基类如何知道其派生类的属性
- C++基类指针容器中,编辑特定对象的属性
- C++引用基类中的子类指针属性
- C++派生类的设置属性到从同一基类派生的未知类对象
- C++:新的基类,但它可以访问派生类的属性
- C++-填充派生类数据成员,同时设置基类属性值
- C++ 修改基类的属性
- 从基类指针比较模板化子类的属性
- 是否可以在初始化列表中使用基类属性
- 如何在C++中从基类访问派生类的属性
- 基类作为属性
- 使用派生类"istream"读取基类的属性
- 实现基类方法来访问派生类的属性
- 基类属性的不同初始化