第一个调用A的默认拷贝函数,第二个是赋值,把B赋值给A,在此之前,A已经经历了一次初始化了。所以这里是赋值
class A
{
public:
A() = default;
A(const A& a) = default; //等价于注释掉的下句
//A(const A& a){this->a = a.a};
private:
int a;
}
class B:public A
{
public:
B() = default;
B(const B& b):A(b) //A(b)调用基类复制构造,下面不用再写this->a = b.a了
{
this->b = b.b;
}
private:
int b;
}
class B(B&b1):A(b1) 调用了父类的构造函数
后者试图把B类对象的引用给类A的构造函数