C++看程序写结果 虚函数、构造、析构、初始化列表
虚函数、构造、析构、初始化列表
#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,