C++是一个类的默认构造函数,调用另一类的另一个默认构造函数

C++ a default constructor of a class calling another default constructor of another class

本文关键字:默认 构造函数 一类 另一个 调用 一个 C++      更新时间:2023-10-16

我有两个类class A和B.我正试图使用class B的默认构造函数来调用class A的默认构造函数,以初始化class B中A类的值。

class A
{
    A();    
    int x;
}
A::A()
{
    //initialized x
    x=10;
}
class B
{
    B();
    A aobj;
}
B::B()
{
    //Calling class A's  default constructor to initialize B's aobj.
    aobj();
}

我接到一个打给"(aobj)"的不匹配电话。请帮我解决。

实际上,除非显式构造成员,否则不需要显式默认构造成员,因为这是自动发生的。如果你真的想显式构造一个成员,无论它是默认构造还是其他什么,你都需要将初始化放入成员初始值设定项列表:

B::B()
    : aobj() {
}

函数体中的表达式aobj()试图在成员aobj上使用函数调用运算符。这样做可能是合理的,例如,当aobj是类型std::function<void()>时。

在语句的上下文中,aobj()不尝试构造aobj变量,而是尝试使用operator()运算符重载来调用它。

相反,尝试在B::B()的初始值设定项列表中进行构造:

B::B() : aobj()
{
}

但请注意,这是多余的,因为如果从初始值设定项列表中省略,则会隐式调用成员对象的默认构造函数。也就是说,这个构造函数会做完全相同的事情:

B::B() { }