由于编辑器的原因:此处代码预处理了头文件
#include "pch.h"
1、
#include "pch.h"
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "调用A无参" << endl; }
A(int a) { dataA = a; cout << "调用A有参" << endl; }
private:
int dataA;
};
class B
{
public:
B();
private:
A a1, a2, a3, a4, a5; //定义五个A
};
B::B() { cout << "调用B无参" << endl; }
void main()
{
B b1;
}

2、构造函数的顺序
#include "pch.h"
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "调用A无参" << endl; }
A(int a) { dataA = a; cout << "调用A有参" << endl; }
A(double a) { dataA = a; cout << "调用A有参2" << endl; }
private:
int dataA;
};
class B
{
public:
B();
B(int, int, int);
B(int);
B(int, int);
B(double);
private:
A a1, a2;
int dataB;
};
B::B() { cout << "调用B无参" << endl; }
B::B(int a, int b, int c) :a2(a), a1(b) { dataB = c; cout << "调用B有参1" << endl; }
B::B(int a) { dataB = a; cout << "调用B有参2" << endl; }
B::B(int a, int b) : a2(a), dataB(b) { cout << "调用B有参3" << endl; }
B::B(double a) : a2(a) { cout << "调用B有参4" << endl; }
void main()
{
B b1;
B b2(1, 2, 3);
B b3(4);
B b4(5, 6);
B b5(7.0);
}

分析
1、
B::B(int a, int b) :a2(a),dataB(b) { cout << "调用B有参3" << endl; }
实质上是这样子的:
B::B(int a, int b) :a1(),a2(a),dataB(b) { cout << "调用B有参3" << endl; }
2、
B::B(int a, int b, int c) :a2(a),dataB(c), a1(b) { cout << "调用B有参1" << endl; }
调用顺序:a1构造->a2构造->dataB初始化
例子:
#include "pch.h"
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "调用A无参" << endl; }
A(int a) { dataA = a; cout << "调用A有参" << endl; }
A(double a) { dataA = a; cout << "调用A有参2" << endl; }
private:
int dataA;
};
class B
{
public:
B(int, double, int);
private:
A a1, a2;
int dataB;
};
B::B(int a, double b, int c) :a2(a), a1(b) { dataB = c; cout << "调用B有参1" << endl; }
void main()
{
B b2(1, 2.0, 3);
}

B::B(int a, int b, int c) :a2(a), a1(b) { dataB = c; cout << "调用B有参1" << endl; }
or组合类的构造放在外边
B::B(int a, int b, int c) :a2(a),dataB(c), a1(b) { cout << "调用B有参1" << endl; }
结果都是dataB最后才初始化