C++多层派生时的构造函数

时间:2014-11-07 22:13    点击:

一个类不仅可以派生出一个派生类,派生类还可以继续派生,形成派生的层次结构。在上面叙述的基础上,不难写出在多级派生情况下派生类的构造函数。

通过例下面的程序,读者可以了解在多级派生情况下怎样定义派生类的构造函数。相信大家完全可以自己看懂这个程序。

[例11.7] 多级派生情况下派生类的构造函数。

			
  1. #include <iostream>
  2. #include<string>
  3. using namespace std;
  4. class Student//声明基类
  5. {
  6. public://公用部分
  7. Student(int n, string nam)//基类构造函数
  8. {
  9. num=n;
  10. name=nam;
  11. }
  12. void display( )//输出基类数据成员
  13. {
  14. cout<<"num:"<<num<<endl;
  15. cout<<"name:"<<name<<endl;
  16. }
  17. protected://保护部分
  18. int num;//基类有两个数据成员
  19. string name;
  20. };
  21. class Student1: public Student//声明公用派生类Student1
  22. {
  23. public:
  24. Student1(int n,char nam[10],int a):Student(n,nam)//派生类构造函数
  25. {age=a;}//在此处只对派生类新增的数据成员初始化
  26. void show( ) //输出num,name和age
  27. {
  28. display( ); //输出num和name
  29. cout<<"age: "<<age<<endl;
  30. }
  31. private://派生类的私有数据
  32. int age; //增加一个数据成员
  33. };
  34. class Student2:public Student1 //声明间接公用派生类Student2
  35. {
  36. public://下面是间接派生类构造函数
  37. Student2(int n, string nam,int a,int s):Student1(n,nam,a) {score=s;}
  38. void show_all( ) //输出全部数据成员
  39. {
  40. show( ); //输出num和name
  41. cout<<"score:"<<score<<endl; //输出age
  42. }
  43. private:
  44. int score; //增加一个数据成员
  45. };
  46. int main( )
  47. {
  48. Student2 stud(10010,"Li",17,89);
  49. stud.show_all( ); //输出学生的全部数据
  50. return 0;
  51. }
运行时的输出如下:
num:10010
name:Li
age:17
score:89

请注意基类和两个派生类的构造函数的写法。

基类的构造函数首部:
    Student(int n, string nam)
派生类Student1的构造函数首部:
    Student1(int n, string nam],int a):Student(n,nam)
派生类Student2的构造函数首部:
    Student2(int n, string nam,int a,int s):Student1(n,nam,a)
注意不要写成:
    Student2(int n, string nam,int a,int s):Student1(n,nam),student1(n, nam, a)

不要列出每一层派生类的构造函数,只需写出其上一层派生类(即它的直接基类)的构造函数即可。在声明Student2类对象时,调用Student2构造函数;在执行Student2构造函数时,先调用Student1构造函数;在执行Student1构造函数时,先调用基类Student构造函数。初始化的顺序是:
  • 先初始化基类的数据成员num和name。
  • 再初始化Student1的数据成员age。
  • 最后再初始化Student2的数据成员score。 

来源:未知//所属分类:基础教程/更新时间:2014-11-07 22:13
顶一下
(0)
0%
踩一下
(0)
0%
上一篇:C++有子对象的派生类的构造函数
下一篇:C++派生类构造函数的特殊形式
相关内容