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。

*/
原文地址:https://www.cnblogs.com/lbangel/p/3274646.html