多级派生情况下派生类的构造函数:
/*在执行student2构造函数时,先调用student1的构造函数;
在指向student1构造函数时,先调用基类student构造函数。
初始化顺序:
1---先初始化基类的数据成员num,name
2---再初始化student1的数据成员age
3---最后再初始化student2的数据成员score*/
//多级派生情况下派生类的构造函数
#include <iostream>
#include<string.h>
using namespace std;
class student // 声明基类
{
public: //共用部分
student(int n,string nam)//基类构造函数
{
num=n;
name=nam;
}
void display() //输出基类数据成员
{
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
}
protected: //保护部分
int num; //基类有两个数据成员
string name;
};
class student1:public student //声明公用派生类student1
{
public: //派生类构造函数
student1(int n,string nam,int a):student(n,nam)
{
age=a;
}
void show()
{
display(); //输出num,name
cout<<"age:"<<age<<endl; //输出age
}
private:
int age;//增加一个数据成员
};
class student2:public student1 //声明间公用派生类student2
{
public:
//下面是间接派生类构造函数
student2(int n,string nam,int a ,int s):student1(n,nam,a)
{
score=s;
}
void show_all()//输出全部数据成员
{
show();//输出num,name,age
cout<<"score:"<<score<<endl;//输出score
}
private:
int score;//新增加一个数据成员
};
int main()
{
student2 stud(10010,"Li--Ming",17,98);
stud.show_all();//输出学生的全部数据
return 0;
}
结果:
