派生类的构造函数构造会先调用基类的默认构造函数,然后在调用派生类的构造函数
派生类的析构函数则相反 先调用派生类的析构函数在调用基类的构造函数
派生类构造函数 自底向上,析构函数 自上向底
如果要派生类构造函数想调用重载的基类构造函数那么就必须 D(): B(参数){} 拷贝构造函数
关于继承可以看我的这一篇添加链接描述
#include <iostream>
#include <string>
using namespace std;
class B{
int b{ 0 };
std::string name;
public:
B(const B&b) :b{ b.b }, name(b.name){cout << "B类拷贝构造函数\n"; }
B(int b, string n) :b(b), name(n){ cout << "B类构造函数\n"; }
};
class D :public B{
double d{ 2.5 };
public: //通过B(d) 调用B类拷贝函数,就不会报错说没有构造函数
D(const D&d) :d(d.d), B(d){ cout << "D类拷贝函数\n"; } // 在基类构造函数拷贝这样数据也不会被切割因为都赋予了
D(double d, int b, string n) :B(b, n), d(d){ cout << "D类构造函数\n"; } //吧d隐式转换b
};
int main(){
D d(3.0, 2, "hello"); // 先调用构造函数
D d2(d); //将派生类对象值传到基类给基类赋值,然后在调用派生类拷贝函数
while (true);
return 0;
}