【发布时间】:2015-06-03 19:20:23
【问题描述】:
如果我有这些课程:
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 的构造函数中发现的那样,无论它放在哪里,总是首先被调用。
这样做的真正目的是计算由三个立方体(头、身体和腿)组成的 Player 类(在桌上足球中找到的 Player)的转动惯量,这三个立方体在 Player 构造函数和 Player 中初始化惯性在 Body 的构造函数中初始化(Body 是 Player 的父级)。
我的问题是播放器的惯性取决于立方体的惯性,我计算它们,我想对它们求和并在其上调用父对象,但我无法在不初始化立方体的情况下对它们求和(它们之前什么都不是初始化)。
那么怎么做呢?
PS
我知道我可以把关系和总和,好吧,但是它很长,如果我这样做,构造函数会很容易变得丑陋,我认为这只是最后的手段。
【问题讨论】:
-
基类依赖于派生类几乎总是糟糕的设计。
-
@Pubby,除非你使用 CRTP。
-
@Pubby 例外是抽象类?
-
@RSahu Comparable in java 是 CRTP 的一个例子
-
你建房子不先打地基吗?从屋顶开始是愚蠢的
标签: c++ constructor