c++ 单继承派生类的构造函数
1、派生类的构造函数:
#include <iostream> #include<string> using namespace std; class Student//声明基类Student {
public: Student(int n,string nam,char s) //基类构造函数 {
num=n; name=nam; sex=s;
} ~Student( ){ } //基类析构函数 protected: //保护部分 int num; string name; char sex ; };
class Student1: public Student //声明派生类Student1,继承方式有public,protected,private。 {
public: //派生类的公用部分
Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s) //派生类构造函数,也可以写成初始化列表形式,如:Student1(int n, string nam,char s,int a, string ad):Student(n,nam,s),age(a),addr(ad){}
{
age=a; //在函数体中只对派生类新增的数据成员初始化 addr=ad; } void show( ) {
cout<<″num: ″<<num<<endl; cout<<″name: ″<<name<<endl; cout<<″sex: ″<<sex<<endl; cout<<″age: ″<<age<<endl; cout<<″address: ″<<addr<<endl<<endl; } ~Student1( ){ } //派生类析构函数 private: //派生类的私有部分 int age; string addr; }; int main( ) {
Student1 stud1(10010,″Wang-li″,′f′,19,″115 Beijing Road,Shanghai″); Student1 stud2(10011,″Zhang-fun″,′m′,21,″213 Shanghai Road,Beijing″); stud1.show( ); //输出第一个学生的数据 stud2.show( ); //输出第二个学生的数据 return 0; } /* 运行结果为 num:10010 name:Wang-li sex:f address: 115 Beijing Road,Shanghai num:10011 name:Zhang-fun sex:m address: 213 Shanghai Road,Beijing
*/
2、多重派生类的构造函数:
#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类对象时,调用Student2构造函
数;在执行Student2构造函数时,先调用Student1
构造函数;在执行Student1构造函数时,先调用基
类Student构造函数。初始化的顺序是:
① 先初始化基类的数据成员num和name。
② 再初始化Student1的数据成员age。
③ 最后再初始化Student2的数据成员score。
*/