如果class B中有类型为class A的成员变量,class A的初始化如何调用构造函数?
代码
#include<iostream>
using namespace std;
class A
{
public:
A(){
cout << "A的默认构造函数 "<< endl;
};
A(int x, int y){
cout << "A的参数构造函数 "<< endl;
}
};
class B
{
public:
B():a(A(1,1)) //B默认构造函数调用A参数函数
{
cout << "B的默认构造函数 "<< endl;
// bx=A(7,8);
}
B(int a, int b) //B参数构造函数调用A默认构造函数
{
cout << "B的参数构造函数 "<< endl;
}
A a; //以类A作为类B成员变量
};
int main(int argc, char* argv[])
{
B b1; //B的默认构造函数,调用一次A的默认构造函数
cout << "------------------------------ "<< endl;
B b2(1,2); //B的带参数构造函数,也调用一次A的默认构造函数
return 0;
}
输出为:
A的参数构造函数
B的默认构造函数
------------------------------
A的默认构造函数
B的参数构造函数
结论
- B的构造函数(默认的或者参数的)在函数体之前默认调用A的默认构造函数,不需要在初始化列表中指定;
- B的构造函数可以在初始化列表中替换为A的默认构造函数为参数构造函数。