C++多层派生时的构造函数
时间:2014-11-07 22:13 点击:次
一个类不仅可以派生出一个派生类,派生类还可以继续派生,形成派生的层次结构。在上面叙述的基础上,不难写出在多级派生情况下派生类的构造函数。
通过例下面的程序,读者可以了解在多级派生情况下怎样定义派生类的构造函数。相信大家完全可以自己看懂这个程序。
[例11.7] 多级派生情况下派生类的构造函数。
运行时的输出如下:
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构造函数。初始化的顺序是:
通过例下面的程序,读者可以了解在多级派生情况下怎样定义派生类的构造函数。相信大家完全可以自己看懂这个程序。
[例11.7] 多级派生情况下派生类的构造函数。
- #include <iostream>
- #include<string>
- 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,char nam[10],int a):Student(n,nam)//派生类构造函数
- {age=a;}//在此处只对派生类新增的数据成员初始化
- void show( ) //输出num,name和age
- {
- display( ); //输出num和name
- cout<<"age: "<<age<<endl;
- }
- 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
- cout<<"score:"<<score<<endl; //输出age
- }
- private:
- int score; //增加一个数据成员
- };
- int main( )
- {
- Student2 stud(10010,"Li",17,89);
- stud.show_all( ); //输出学生的全部数据
- return 0;
- }
#include <iostream> #include<string> 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,char nam[10],int a):Student(n,nam)//派生类构造函数 {age=a;}//在此处只对派生类新增的数据成员初始化 void show( ) //输出num,name和age { display( ); //输出num和name cout<<"age: "<<age<<endl; } 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 cout<<"score:"<<score<<endl; //输出age } private: int score; //增加一个数据成员 }; int main( ) { Student2 stud(10010,"Li",17,89); stud.show_all( ); //输出学生的全部数据 return 0; }
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。
顶一下
(0)
0%
踩一下
(0)
0%
上一篇:C++有子对象的派生类的构造函数
下一篇:C++派生类构造函数的特殊形式
相关内容:
最新内容
热点内容
- QQ群
-
微信
- 返回首页
- 返回顶部