D d2 = d1;
在构造d2的时候用的是D的拷贝构造函数,基类B使用的是无参数的构造函数
我猜你的疑惑是为什么B不是拷贝构造函数,那是因为D的拷贝构造函数里面调用的就是基类的默认构造函数,如果基类B也想调用拷贝构造函数,则D的拷贝构造函数应该写为
D(D& n) : B(n) { cout << "D拷贝构造" << endl; }