1.问题12345678910111213141516171819202122232425classA {private:intm_a;public:A(inta) {cout A(int a)....... endl;m_a a;}voidprint() {cout m_a m_a endl;}};classB {private:intm_b;A m_a1;A m_a2;public:B(A a1,A a2,intb){m_b b;m_a1(a1);//此处调用A的拷贝函数会报错m_a2(a2);//此处调用A的拷贝函数会报错}};错误2.解决方法初始化列表将class B构造函数改写为123456public:B(A a1,A a2,intb) :m_a1(a1),m_a2(a2)//构造函数的初始化列表{m_b b;}};完整代码如下1234567891011121314151617181920212223242526272829303132333435363738394041424344#include iostreamusingnamespacestd;classA {private:intm_a;public:A(inta) {cout A(int a)....... endl;m_a a;}voidprint() {cout m_a m_a endl;}A(constA another) {m_a another.m_a;}~A() {cout ~A()...... endl;}};classB {private:intm_b;A m_a1;A m_a2;public:B(A a1,A a2,intb) :m_a1(a1),m_a2(a2)//构造函数的初始化列表调用拷贝构造{cout B(A a1,A a2, int b)....... endl;m_b b;}~B() {cout ~B()....... endl;cout m_b m_b endl;cout A m_a1 endl;m_a1.print();cout A m_a2 endl;m_a2.print();}};intmain(intargc,char** argv) {A a1(1), a2(2);B b1(a1, a1, 3);}运行结果3.顺序问题构造对象成员的顺序跟初始化列表的顺序无关而是跟成员对象定义的顺序有关。面试会问例子123456789101112131415161718192021222324252627282930313233343536classA {private:intm_a;public:A(inta) {cout A(int a).......a endl;m_a a;}voidprint() {cout m_a m_a endl;}A(constA another) {m_a another.m_a;}~A() {cout ~A()...... endl;}};classB {private:intm_b;A m_a2;A m_a1;public:B(inta1,inta2,intb) :m_a1(a1), m_a2(a2)//调用有参构造函数{cout B(int a1, int a2, int b)....... endl;m_b b;}~B() {cout ~B()....... endl;}};intmain(intargc,char** argv) {B b2(1, 2, 3);}结果跟下面顺序有关123private:A m_a2;A m_a1;跟下面顺序无关1B(inta1,inta2,intb) :m_a1(a1), m_a2(a2)//调用有参构造函数总结本篇文章就到这里了希望能够给你带来帮助