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

时间:2015-05-23 23:56:19

标签: c++ inheritance constructor default

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

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我可以使用子类构造函数的默认参数。但据说我们应该使用全局参数。

但我使用的是班级" B"所以在释放此数据之前调用A构造函数。在结果中我得到了一些垃圾" x"但不是9。

!所以,问题是从另一个,更具体的问题中提取出来的。我有一个基本的课程"对象"。有些孩子喜欢" Mob"或"播放器"。对象内部有一个物理(Box2D)对象。 Certanly,除了一些参数之外,创建该物理主体的所有动作都是相同的。因此,我将algorythm存储在" Object" construtor,并将所有需要的数据放在子类中。但是,在创建一个" Object"之前,我无法获得这些数据。这需要数据。

Here是一个依赖类的解决方案示例。

我将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

如图所示here

答案 1 :(得分:0)

您想要的是为A

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

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

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

由于B的构造函数首先尝试构造基本部分(在本例中为A),并且只有在初始化了{的其余部分后,您的实际代码才会执行​​您所期望的操作。 {1}}。