C++之派生类的构造与析构

📅 发布时间:2026/7/8 7:11:50 👁️ 浏览次数:
C++之派生类的构造与析构
文章目录构造析构构造如果子类构造函数没有显式指明基类部分(基类子对象)的初始化方式那么编译器将会自动调用基类的无参构造函数来初始化基类子对象如果希望以有参的方式来初始化基类部分那么必须使用初始化列表来显式指明子对象构造顺序分配内存构造基类子对象(按继承表顺序)构造成员子对象(按声明顺序)执行子类构造函数代码#includeiostreamusingnamespacestd;classMember{private:intm_k;public:Member(){coutMember()endl;m_k0;}Member(intk){coutMember(int)endl;m_kk;}};classBase{private:intm_i;public:Base(){coutBase()endl;m_i0;}Base(inti){coutBase(int)endl;m_ii;}};classDerived:publicBase{private:intm_j;Member m_m;public:Derived():Base(100),m_m(200){coutDerived()endl;}Derived(inti,intj):Base(i){coutDerived(int, int)endl;m_jj;}};intmain(void){Derived d1;Derivedd2(1,2);return0;}析构子类的析构函数无论自己定义的还是编译器缺省提供都会自动调用基类的析构函数完成基类子对象的销毁。子类对象销毁过程执行子类析构函数代码析构成员子对象(按声明逆序)析构基类子对象(按继承表逆序)释放内存#includeiostreamusingnamespacestd;classMember{private:intm_k;public:Member(){coutMember()endl;m_k0;}Member(intk){coutMember(int)endl;m_kk;}~Member(){cout~Member()endl;}};classBase{private:intm_i;public:Base(){coutBase()endl;m_i0;}Base(inti){coutBase(int)endl;m_ii;}~Base(){cout~Base()endl;}};classDerived:publicBase{private:intm_j;Member m_m;public:Derived():Base(100),m_m(200){coutDerived()endl;}Derived(inti,intj):Base(i){coutDerived(int, int)endl;m_jj;}~Derived(){cout~Derived()endl;}};intmain(void){Derived d1;//Derived d2(1,2);return0;}