在其他 类 构造函数中使用参数化构造函数
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
的默认构造函数。
我担心这是一个非常基本的问题,但是,我还没有能够解决它。
我有一个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
的默认构造函数。