### 请说明从父类派生的子类后，子类对象的构造顺序

答案：

当我们从父类派生一个子类后，定义一个子类对象时，它首先将依次调用父类的构造函数，最后调用子类自身的构造函数。例如：

class CPerson //定义一个基类

{

protected:

char * m_pszName;

public:

CPerson()

{

m_pszName = new char[128];

cout <<"Person 构造函数!" << endl;

}

virtual ~CPerson()

{

delete [] m_pszName;

}

};

class CStudent: public CPerson //从 CPerson 派生一个子类

{

private:

char * m_pszClass;

int m_nAge;

public:

CStudent()

{

m_nAge = 15;

m_pszClass = new char[128];

cout << "Student 构造函数!" << endl;

}

virtual ~CStudent()

{

m_nAge = 0;

delete []m_pszClass;

}

};

int main(int argc, char* argv[])

{

CStudent std; //定义一个子类对象,首先将调用 CPerson 类构造函数，然后调用 CStudent 构造函数

return 0;

}

运行效果如图 1 所示。

图 1 对象构建顺序