在其他 类 构造函数中使用参数化构造函数

use parameterized constructor in other classes constructor

我担心这是一个非常基本的问题,但是,我还没有能够解决它。

我有一个class A

// classA.h
...

class ClassA {
    public:
        ClassA();
        ClassA(int foo);
    private:
        int _foo;

    ...

}

// classA.cpp

ClassA::ClassA() {
    _foo = 0;
}

ClassA::ClassA(int foo) {
    _foo = foo;
}

...

第二个class B在构造函数中使用了class A的一个实例:

// classB.h
...

#include "classA.h"

#define bar 5

class ClassB {
    public:
        ClassB();
    private:
        ClassA _objectA;

    ...

}

// classB.cpp

ClassB::ClassB() {
    _objectA = ClassA(bar);
}

...

请注意,class A 的默认构造函数从未使用过。事实上,在我的真实世界用例中,使用任何类型的默认构造函数甚至都没有意义,因为 _foo 必须动态分配。

但是,如果我删除默认构造函数,编译器returns会报错:

no matching function for call to 'ClassA::ClassA()'

有没有一种方法可以在不为 class A 定义默认构造函数的情况下将 class A 的实例用作 class B 中的对象?这将如何完成?

使用ClassA的默认构造函数。 ClassB_objectA 用它初始化,然后 然后 您将 ClassA(bar) 分配给它。

您可以使用 constructor initializer lists:

来解决您的问题
ClassB::ClassB() : _objectA(bar)
{}

随便写

ClassB::ClassB() :  _objectA(bar)
{
}

问题是当 ClassB 的构造函数的主体被执行时,数据成员 _objectA 已经被构造并且在主体内部使用了复制赋值运算符

ClassB::ClassB() {
    _objectA = ClassA(bar);
   ^^^^^^^^^^^^^^^^^^^^^^^^
}

因此您可以删除 ClassA 的默认构造函数。