gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:45 25 4
gpt4 key购买 nike

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

#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,它在构造期间被修改,作为初始化 att_b 的函数的输入B 类。我的顾虑是:

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

最佳答案

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

    没有。

    当使用成员初始化列表时,顺序是完全定义的:首先是基类的顺序,然后是成员的顺序。因此,在您创建任何成员时,所有基类和所有先前声明的成员都会被实例化。如果您在构造函数中切换顺序,您的编译器应该会输出警告。

  • 这是实现您想要的目标的好方法吗?

    由于您没有告诉我们您打算用这些类做什么,所以我无法告诉您这是否是一个好方法,但如果它符合您的需要,您可以这样做。

关于c++ - 可以在初始化列表中使用基类属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com