A是C ++的新手,并且想知道如何调用A类构造函数,因为B的默认构造函数没有初始化A。 注意:B类不是从A类继承的
#include "iostream"
using namespace std;
class A
{
public:
A() { cout << "A's Constructor Called " << endl; }
};
class B
{
A a;
public:
B() { cout << "B's Constructor Called " << endl; }
};
int main()
{
B b1;
return 0;
}
Output is :
A's Constructor Called
B's Constructor Called
答案 0 :(得分:3)
因为您没有告诉B如何构造其数据成员a
,所以它将使用A的默认构造函数。如果A没有默认的构造函数,则可能是编译器错误。要从B的构造函数中调用a
的非默认构造函数,请参见以下代码:
#include "iostream"
using namespace std;
class A
{
public:
A() { cout << "A's Constructor Called " << endl; }
A(int) { cout << "A's int Constructor Called " << endl; }
};
class B
{
A a;
public:
B() { cout << "B's Constructor Called " << endl; }
B(int i) : a(i) { cout << "B's int Constructor Called " << endl; }
};
int main()
{
B b1;
B b1(1); // this would call the two new constructors
return 0;
}
答案 1 :(得分:0)
类B的构造函数初始化该类的所有成员,尤其是A a
。由于类A具有构造函数,因此在构造函数中的代码运行之前实例化类B时将调用该类。这意味着构造函数中的代码可以访问B的所有初始化成员。因此,如您所见,B类的对象的构造首先调用A类的对象a的构造,然后给出有关B的输出。构造函数。
答案 2 :(得分:0)
我一直在寻找类似下面的内容,终于能够找出答案。
构造函数用于设置对象的初始状态。对于继承层次结构,将按照继承层次结构(OO术语中的IS-A关系)的顺序构造基类对象,然后再派生类对象。
类似地,当一个对象嵌入另一个对象(OO术语或包含中的HAS-A关系)时,将按照声明的顺序调用嵌入对象的构造函数。
在上述情况下,A嵌入在B中。在构造“ b1”对象之前,将调用A的构造函数以建立状态“ a”。