77范文网 - 专业文章范例文档资料分享平台

第5章 继承与派生(6)

来源:网络收集 时间:2018-11-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

~Member1 ~S11 ~S1

我们再来看一看书中的实例。

//例5.7 多级派生情况下派生类的构造函数。 #include #include using namespace std; class Student//声明基类

{public: //公用部分 Student(int n, string nam ) //基类构造函数 {num=n; name=nam; }

void display( ) //输出基类数据成员 {cout<<\ cout<<\

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( ) //输出num,name和age { display( ); //输出num和name cout<<\

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 private:

int score; //增加一个数据成员 };

int main( )

{Student2 stud(10010,\

stud.show_all( ); //输出学生的全部数据

return 0; }

5.5.4 派生类构造函数的特殊形式 1)当不需要对派生类新增的成员进行任何初始化操作时,派生类构造函数的函数可以为空,即构造函数是空函数。

2)如果在基类中没有定义构造函数,或定义了没有参数的构造函数,那么,在定义派生类构造函数时可以不写基类的构造函数。 #include using namespace std; class Meb {

public: Meb(){cout<<\};

class A {

public: A(){cout<<\ //A():m(){cout<<\private:

Meb m; };

class A1: public A {

public: A1(){cout<<\ //A1():A(){cout<<\};

int main() { A1 a1; }

5.5.5 派生类的析构函数 在派生时,派生类是不能继承基类的析构函数的,需要通过派生类的析构函数去调用基类的构造函数。 #include using namespace std; class Meb {

public: Meb(){cout<<\ ~Meb(){cout<<\};

class A {

public:

A(){cout<<\ ~A(){cout<<\private:

Meb m; };

class A1: public A {

public: A1(){cout<<\ ~A1(){cout<<\};

int main() { A1 a1; }

从运行结果可以看出,调用析构函数的顺序正好与构造函数正好是相反的。即先执行派生类自己的析构函数,再调用子对象的析构函数,再调用基类的析构函数。

5.6 多重继承

前面讨论的是单继承,即一个类是从一个基类派生而来的。这节讲多重继承,即一个派生类同时继承多个基类。 5.6.1 声明多重派生继承的方法

下面从一个最简单的多重继承的实例中来看怎么声明多重派生。 #include using namespace std; class A { int a; public: A(){cout<<\};

class B { int a; public: B(){cout<<\};

class C { int a; public: C(){cout<<\};

class D:public A,public B,public C {

public: D(){cout<<\};

int main() { D d; return 0; }

运行结果:A B C D

5.6.2 多重继承派生类的构造函数

上面的实例中的构造函数是无参数的,所以我们可以不用管构造函数的建立,下面来看一下如果有参数初始化时,构造函数应该怎么构造。 #include

using namespace std; class A { int a; public: A(int x){a=x;cout<<\};

class B { int b; public: B(int x){b=x;cout<<\};

class C { int c; public: C(int x){c=x;cout<<\};

class D:public A,public B,public C { int d; public: D(int x1,int x2,int x3,int x4):A(x1),B(x2),C(x3){d=x4;cout<<\};

int main() { D d(1,2,3,4); return 0; }

运行结果:A1 B2 C3 D4

从上例中可以看出,构造函数的形式如下:

派生类构造函数名(总参数表列):基类1构造函数(参数表列), 基类2构造函数(参数表列), 基类1构造函数(参数表列),...{派生类中新增数据成员初始化语句}

调用基类构造函数的顺序是按照声明派生类时基类出现的顺序。 下面来看一个书中的实例 //P176 例5.8

#include #include using namespace std;

class Teacher //声明Teacher(教师)类

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第5章 继承与派生(6)在线全文阅读。

第5章 继承与派生(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/293444.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: