gpt4 book ai didi

c++ - 在 C++ 中调用父类的构造函数之前在类中初始化变量

转载 作者:行者123 更新时间:2023-11-28 02:26:04 27 4
gpt4 key购买 nike

如果我有这些类(class):

class A
{
int x,y;
public:
A(const int &x,const int &y):x(x),y(y){}
};
class B:public A
{
int z;
public :
B(const int &x,const int &y,const int &thez):z(thez),A(x+z,y+z)
};

我想在调用 A 的构造函数之前在类 B 中初始化 z,但正如我从调试 A 的构造函数中发现的那样,无论它放在哪里,总是首先被调用。

真正的目标是计算由三个立方体(头、 body 和腿)组成的 Player 类(foosball 中的 Player)的转动惯量,这三个立方体在 Player 构造函数和 Player 中初始化惯性在 Body 的构造函数中初始化(Body 是 Player 的父级)。

我的问题是 Player 的惯性取决于立方体的惯性,我计算它们并且我想对它们求和并在其上调用 parent 但我不能在不初始化立方体的情况下对它们求和(它们之前什么都不是初始化)。

那么怎么做呢?

附言

我知道我可以把关系和总和放在一起,是的,但是它太长了,如果我这样做的话,构造函数很容易变得丑陋,我认为这只是最后的手段。

最佳答案

除了这样做是否是个好主意之外:如果你想在基类成员之前初始化派生类成员,你可以使用 base-from-member-idiom : 把相应的成员放入另一个基类中,并确保它先被初始化。

class A
{
int x,y;
public:
A(const int &x,const int &y):x(x),y(y) {}
};

class Z
{
int z;
Z(const int &thez): z(thez) {}
};

class B: public Z, public A
// ^^^^^^^^
// Z must come before A
{
public :
B(const int &x,const int &y,const int &thez): Z(thez), A(x+z,y+z) {}
};

基类Z——尤其是它的成员z——将在A的成员之前被初始化。

免责声明:一般来说,要小心多重继承及其 diamond of death .

关于c++ - 在 C++ 中调用父类的构造函数之前在类中初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628798/

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