继承 class 中的默认构造函数参数

Default constructor parameters in inheritant class

我需要为继承的 class 的构造函数使用默认参数。

class A
{
public:
    A(int data)
    {
        a_data = data;
    }
    ~A(){}

    int a_data; 
};


class B : public A
{
public:
    B(int in, int num = DATA) : A(num)
    {
        b_data = in;
    }
    const int DATA = 9;
    int b_data;
};

int main()
{
    B b(3);
    int x = b.a_data;

    return 0;
}

我发现 here 我可以为 child 的 class 构造函数使用默认参数。但是据说要用一个全局参数。

但我使用了来自 class“B”的数据,因此在释放此数据之前调用 A 构造函数。结果我在“x”中得到了一些垃圾,但不是 9.

!因此,问题是从另一个更具体的问题中提取出来的。我有一个基本的 class “Object”。还有一些 children 喜欢“Mob”或“Player”。 Object 里面有一个实体 (Box2D) object。当然,除了某些参数外,所有创建物理 [​​=26=] 的操作都是相同的。因此,我将算法存储在“Object”构造函数中,并将所有需要的数据放入 child classes 中。但是,在创建需要该数据的“Object”之前,我无法访问该数据。

Here 是一个依赖 class.

的解决方案示例

如有任何帮助,我将不胜感激。

你想要的是为A

提供一个默认构造函数
A(int data = 9)

所以 B 可以默认创建 A 参数 9

B(int in){...} // here the A part is constructed with 9

您的实际代码没有按照您的预期执行,因为 B 的构造函数首先尝试构造基础部分(在本例中为 A),并且仅在初始化 A 的其余部分之后=13=].

使用默认值构造函数,例如:

B(int in, int num = 9) : A(num) {
    b_data = in;
}

如图所示here