最新c c++语言程序设计(西电版第11章 派生类与继承(共47张ppt课件).pptx
《最新c c++语言程序设计(西电版第11章 派生类与继承(共47张ppt课件).pptx》由会员分享,可在线阅读,更多相关《最新c c++语言程序设计(西电版第11章 派生类与继承(共47张ppt课件).pptx(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一页,共四十七页。11.1类的继承与派生类的继承与派生11.2 派生类的构造函数派生类的构造函数(hnsh)和析构函数和析构函数(hnsh)11.3 多重继承多重继承11.4 虚基类虚基类11.5 小结小结第二页,共四十七页。继承继承是是C+的一种重要的一种重要(zhngyo)机制,是程序可机制,是程序可重用与扩充的一个重要重用与扩充的一个重要(zhngyo)方面。这一机制方面。这一机制使得程序员可以在已有类的基础上建立新类。使得程序员可以在已有类的基础上建立新类。从而扩展程序功能、体现类的多态性特征。从而扩展程序功能、体现类的多态性特征。 第三页,共四十七页。l自然世界的类概念是自然世界的
2、类概念是抽象的抽象的,类的下面还有子类,类的下面还有子类,子类继承父类的各种特征。子类继承父类的各种特征。l面向对象程序设计允许你声明一个新类作为另一个面向对象程序设计允许你声明一个新类作为另一个类的派生。类的派生。l派生类派生类(也称子类)可以声明新的属性(成员)(也称子类)可以声明新的属性(成员)和新的操作(成员函数)。和新的操作(成员函数)。l继承继承可以让你可以让你重用重用父类代码,专注于为子类编写父类代码,专注于为子类编写新代码。新代码。l我们称最初的类为我们称最初的类为基类基类,根据它生成,根据它生成(shn chn)的类的类称为派生类(子类),这种派生可以是多层次的。称为派生类(
3、子类),这种派生可以是多层次的。11.1.1 继承继承(jchng)与派生的概与派生的概念念第四页,共四十七页。哺乳动物类哺乳动物类猫类猫类犬类犬类波斯猫波斯猫安哥拉猫安哥拉猫西施犬西施犬沙皮犬沙皮犬第五页,共四十七页。l例如例如(lr):class personprivate: char name10; int age; char sex;public: void print();class employeeprivate: char name10; int age; char sex; char department20; float salary;public: void print()
4、;第六页,共四十七页。声明一个派生类的一般格式为:声明一个派生类的一般格式为:class 派生类名派生类名:派生方式派生方式 基类名基类名/派生类新增的数据派生类新增的数据(shj)成员和成员函数成员和成员函数“保护成员保护成员”是由是由protected声明的类成员。保声明的类成员。保护成员不能被外界引用,这点和私有成员类似,护成员不能被外界引用,这点和私有成员类似,但它可以被派生类的成员函数引用。但它可以被派生类的成员函数引用。下面用派生关系改写下面用派生关系改写person和和employee类。类。第七页,共四十七页。class personprivate: char name10;
5、int age; char sex;public: void print();第八页,共四十七页。class employee:public personprivate: char department20; float salary;public: /第九页,共四十七页。l公有公有(gngyu)派生派生class employee:public person /l私有私有(syu)派生派生class employee:private person /l保护派生保护派生class employee:protected person /第十页,共四十七页。l公有继承公有继承(jchng):基类的
6、公有成员和保护成员作为派生基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。员仍然是私有的。l保护继承:保护继承:基类的所有公有成员和保护成员都成为基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。函数或友元访问,基类的私有成员仍然是私有的。l私有继承:私有继承:基类的公有成员和保护成员都作为派生类基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。的私有成员,
7、并且不能被这个派生类的子类所访问。l缺省继承方式为缺省继承方式为private.第十一页,共四十七页。继承方式基类特性派生类特性公有继承PublicprotectedprivatePublicProtected不可访问私有继承PublicprotectedprivatePrivatePrivate不可访问保护继承PublicprotectedprivateProtectedProtected不可访问第十二页,共四十七页。#include class Apublic:void f1();protected:int j1;private:int i1; class B:public Apublic
8、:void fn2();protected:int j2;private:int i2; class C:public B public:void f3();第十三页,共四十七页。问题问题(wnt):1. B中成员函数中成员函数f2()能否访问基类中的成员:能否访问基类中的成员:f1(),i1,j1?2. B的对象的对象b1能否访问的成员?能否访问的成员?3.的成员函数的成员函数f3()能否访问直接基类能否访问直接基类B中的成员:中的成员:f2(),i2,j2?4. 派生类派生类C的对象的对象c1是否可以访问直接基类是否可以访问直接基类B的成员?能否访问间接其类的成员?能否访问间接其类A的成员
9、:的成员:f1(),i1,j1? 第十四页,共四十七页。回答:回答:1. 可以访问可以访问f1(),j1,不可访问不可访问i1;2. 可以访问可以访问f1(),不可访问不可访问i1,j1;3. 可以访问可以访问f2(),j2,f1(),j1,不可访问不可访问i1,i2;4. 可以访问可以访问f2(),f1(),其他的都不可以访问其他的都不可以访问;结论:结论:在公有在公有(gngyu)继承时,派生类的成员函继承时,派生类的成员函数可访问基类中的公有数可访问基类中的公有(gngyu)成员和保护成员;成员和保护成员;派生类的对象仅可访问基类中的公有派生类的对象仅可访问基类中的公有(gngyu)成成
10、员。员。 第十五页,共四十七页。【例例11.2 】私有私有(syu)派生类对基类成员的派生类对基类成员的访问。访问。#include class base /声明一个基类声明一个基类 int x;public: void setx(int n) x=n; void showx() coutxendl; class derived:private base /声明一个私有派生类声明一个私有派生类 int y;public: void sety(int n) y=n; void showxy() coutxyendl; /非法,派生类不能访问非法,派生类不能访问(fngwn)基类的私有成员基类的私
11、有成员; 第十六页,共四十七页。【例例 11.3 】私有派生类对基类成员私有派生类对基类成员(chngyun)的访的访问。问。#include class base int x;public: void setx(int n) x=n; void showx() coutxendl; class derived:private base int y;public: void sety(int n) y=n; void showy() coutyendl; 第十七页,共四十七页。main() derived obj; obj.setx(10); /非法非法 obj.sety(20); /合法合法
12、(hf) obj.showx(); /非法非法 obj.showy(); /合法合法 return 0;l如果将如果将derived类改为公有派生,则类改为公有派生,则main函数中的函数中的调用合法否?(例调用合法否?(例11.4)l如果将如果将derived类改为保护派生,则类改为保护派生,则main函数中的函数中的调用合法否?(例调用合法否?(例11.4)思考思考(sko)第十八页,共四十七页。l在派生类中声明在派生类中声明(shngmng)的名字可以支配基的名字可以支配基类中声明类中声明(shngmng)的同名的名字。如果在派的同名的名字。如果在派生类的成员函数中直接使用该名字的话,生
13、类的成员函数中直接使用该名字的话,则表示使用派生类中声明则表示使用派生类中声明(shngmng)的名字,的名字,例如:例如:class Xpublic:int f();class Y:public Xpublic:int f();int g();void Y:g() f(); /表示表示(biosh)被调用的函数是被调用的函数是Y:f(),而不是,而不是X:f()第十九页,共四十七页。基类都有显示的或隐式的构造函数和析构基类都有显示的或隐式的构造函数和析构函数。当创建一个派生类对象时,如何调用基函数。当创建一个派生类对象时,如何调用基类的构造函数对基类数据初始化,以及在撤销类的构造函数对基类数
14、据初始化,以及在撤销派生类对象时,又如何调用基类的析构函数对派生类对象时,又如何调用基类的析构函数对基类对象的数据成员进行基类对象的数据成员进行(jnxng)善后处理,是本善后处理,是本节所要讨论的内容。节所要讨论的内容。第二十页,共四十七页。l通常情况通常情况(qngkung)下,当创建派生类时,首先下,当创建派生类时,首先执行基类的构造函数,随后再执行派生类执行基类的构造函数,随后再执行派生类的构造函数;当撤销派生类对象时,则先的构造函数;当撤销派生类对象时,则先执行派生类的析构函数,随后再执行基类执行派生类的析构函数,随后再执行基类的析构函数。的析构函数。l参见例参见例11.6第二十一页
15、,共四十七页。【例例11. 6】 掌握掌握(zhngw)基类和派生类的构造函数和析构函数基类和派生类的构造函数和析构函数的执行顺序。的执行顺序。#include class basepublic:base() cout基类的构造函数基类的构造函数endl;base() cout基类的析构函数基类的析构函数(hnsh)endl;class derive: public basepublic:derive() cout派生类的构造函数派生类的构造函数endl;derive() cout派生类类的析构函数派生类类的析构函数endl;main()derive op;return 0;第二十二页,共四十
16、七页。l派生类构造函数的一般格式:派生类构造函数的一般格式:l在定义派生类对象时,构造函数的执行在定义派生类对象时,构造函数的执行(zhxng)顺序如下:顺序如下: (1)基类的构造函数基类的构造函数 (2)对象成员的构造函数对象成员的构造函数 (3)派生类的构造函数派生类的构造函数l例例11.7派生类构造函数名(参数表):基类构造派生类构造函数名(参数表):基类构造函数名(参数表),对象成员函数名(参数表),对象成员(chngyun)(chngyun)名名1 1(参数表)(参数表),对象成员名对象成员名n n(参数表)(参数表) 派生类中其它数据成员初始化派生类中其它数据成员初始化 第二十三
17、页,共四十七页。【例例11.7 】派生类构造函数给基类构造函数传递派生类构造函数给基类构造函数传递(chund)参数。参数。#include class baseint x;public: base(int a) cout基类的构造函数基类的构造函数endl; x=a; base() cout基类的析构函数基类的析构函数(hnsh)endl; void showx() coutxendl; ; 第二十四页,共四十七页。class derived:public baseint y;public:derived(int a,int b):base(a) /派生类的构造函数,要缀上基类的构造函数派生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新c c+语言程序设计西电版第11章 派生类与继承共47张ppt课件 最新 c+ 语言程序设计 西电版第 11 派生 继承 47 ppt 课件
限制150内