单继承下派生类新增成员对象的初始化顺序
(1)【意识】派生类新增成员对象也要初始化,千万别忘!
(2)派生类构造函数执行顺序
①调用基类构造函数
②对派生类的新增成员对象初始化[调用顺序为类中声明顺序]
③执行派生类本身的构造函数
(3)派生类析构函数执行顺序[与上构造调用顺序完全相反]
【重要题目】07年复试笔试题
·注意下面派生类中新增成员对象member m1 m2的初始化(子对象)
①需进行初始化,别忘!
②初始化的顺序:同类中声明顺序,与赋值顺序无关!
【代码】已调试可运行
#include "bits/stdc++.h"
#include<iostream>
using namespace std;
class A{public:A(){cout<<"A created"<<endl; //1}~A(){ cout<<"A destroyed"<<endl; //9}};
class member{ public: member(int n){ //派生类新增成员的初始化 this->n=n; number++; cout<<"member"<<n<<"created;number:"<<number<<endl; //2,3 } ~member(){ cout<<"member"<<n<<"destroyed;number:"<<number<<endl; //7,8number--;} private:int n;static int number; //注意是static静态共享变量
};
class B:public A{ public:B():m2(666),m1(888){ //【易错】调用顺序由声明顺序决定,与此处赋值顺序无关 cout<<"B created"<<endl; //4}~B(){cout<<"B destroyed"<<endl; //6}private: //【注意】派生类新增的成员数据对象m1,m2别忘初始化! member m1; //先声明m1后声明m2.调用顺序由此决定 member m2;
};
int member::number=0;
int main(){B b;cout<<"---"<<endl; //5return 0;
}