某公司的一道笔试题,该怎么解决

某公司的一道笔试题#includestdio.hclass A{public:A(){printf(A\n)}~A(){printf(~A\n)}}class B

某公司的一道笔试题
#include<stdio.h>
class A{
public:
  A(){printf("A\n");}
  ~A(){printf("~A\n");}  
};
class B{
public:
  //B(A &a):_a(a){printf("B\n");} //---------------1
  B(A &a){printf("B\n");_a = a;} //---------------2
  ~B(){printf("~B\n");}
private:
  A _a;
};
void main(){
  A a;
  B b(a);
}
如果分别用1和2,各自的输出是?
希望哪位大牛帮忙解释一下

[解决办法]
B(A &a):_a(a){printf("B\n");}
A的拷贝构造,就是说调用A的默认拷贝构造函数把a拷贝到_a, _a不调用A(){printf("A\n");} 
默认的拷贝构造是A(A &a){}这种形式,如果程序员没给出,编译器会自动分配一个拷贝构造函数

B(A &a){printf("B\n");_a = a;}
A的一般构造,_a必须再次调用A(){printf("A\n");} 构造函数

第一种输出A B ~B ~A ~A
第二种输出A A B ~B ~A ~A

你自己可以试一下在A里面加上代码 A(A &a){printf("COPY A\n");}
[解决办法]
1是拷贝构造
2是赋值
[解决办法]
楼上正解。