虚函数、构造、析构、初始化列表

#include <iostream>
using namespace std; class Base{ public: Base(const char* p_szName):m_szName(p_szName)  {cout << "Base类构造:" << m_szName << "," << endl;} virtual ~Base()  {cout << "Base类析构:" << "~" << m_szName << "," << endl;} //~Base() {cout << "Base类析构:" << "~" << m_szName << "," << endl;}
private: const char* m_szName; }; class Derived:public Base{ public: Derived(const char* p_szName):m_szName(p_szName) ,m_objA((const char*)"A") ,m_objB((const char*)"B") ,Base((const char*)"C"){ cout << "Derived类构造:" << m_szName << "," << endl; } virtual ~Derived()  {cout << "Derived类析构:" << "~"<< m_szName << "," << endl;} //~Derived() {cout << "Derived类析构:" << "~"<< m_szName << "," << endl;}

private: const char* m_szName; Base m_objB; Base m_objA; }; int main(){ Base* p= new Derived("D"); delete p; return 0; }

先根据继承先后关系,用C完成Base的构造,然后根据Derived成员定义的先后关系,对字符串m_szName、成员m_objB、成员m_objA进行初始化,但是对字符串m_szName初始化并不首先打印,对成员m_objB、成员m_objA初始化会调用Base的构造函数,然后才执行大括号里面的内容

Base类构造:C, Base类构造:B, Base类构造:A, Derived类构造:D, Derived类析构:~D, Base类析构:~A, Base类析构:~B, Base类析构:~C,