C第11章继承与派生PPT课件
继承与派生
4.1 继承和派生的概念
在软件开发过程中,在定义特殊类时,不需把它的一 般类已经定义过的属性和服务重复地书写一遍,只需要声 明它是某个类的特殊类,并定义它自己的特殊属性和服务。 这将明显地减轻开发工作的强度。 4.1.2 继承的作用 面向对象程序设计的继承性使得大型应用程序的维护 和设计变得更加简单。一方面,大型应用程序设计完成并 交付使用后,经常面临用户的需求发生变化,程序功能需 要扩充等问题。这时程序的修改需要非常谨慎,因为某个 局部的修改可能会影响其他部分,而一个正在使用中的系 统要进行全面的测试,既费时间又有很多实际的困难。另 一方面,一个新的应用系统程序设计在许多方面会和以前 设计过的某个或某些系统的模块非常类似,怎样加快大型 应用程序的开发速度,重用这些已经开发成功的程序模块, 一直是软件设计中迫切需要解决的问题。
4.2 派生类
C++语言派生类多重继承的定义格式如下: class <派生类名>:[继承方式1] [<基类名1>],[继承 方式2] [<基类名2>],…, [继承方式n] [<基类名n>] { <派生类成员变量和成员函数定义> }; 通常,在多重继承时,继承方式设计成一致的形式。 如继承方式均设计成public,或均设计成private。
《C#继承和接口》课件
继承与接口的使用
继承与接口的关系
派生类既可以继承基类,也可 以实现接口。
类实现接口
类通过实现接口的方式,来表 明它提供了该接口所定义的所 有方法和属性。
接口实现类
接口只定义方法和属性,而类 则需要实现具体的处理过程。
实战案例
1
需求说明
开发一个扫码点餐系统,支持顾客选择餐品、付款、生成订单、和查看历史订单等功 能。
C#继承和接口
C#继承和接口是面向对象编程中重要的概念。本课件将介绍继承、接口、抽 象类以及它们的应用场景和使用方法。
继承
概念
继承是指派生类获取基类成员 的过程。派生类可以获得基类 的属性、方法和字段。
单继承
C#只支持单继承。一个类只能 有一个基类。
多层继承
派生类可以派生出新的类,也 可以同时继承多个接口,形成 多层继承的关系。
接口定义一个合约,规定了实现它的 类型需要提供什么方法和属性。
接口继承
接口可以从一个或多个接口继承。
显式实现接口方法
如果一个类实现的多个接口中有相同 名称的方法,可以使用显式实现的方 式进行区分。
பைடு நூலகம்
接口与抽象类
抽象类和接口的区别
抽象类可以包含成员变量,但接口中没有成员变量。
抽象类和接口的应用场景
抽象类适合用于一组相关的类,而接口适合用于一组不同的类。
• 分继离承。会增加复杂度, 而接口一般只能有方 法和属性。
继承和接口应用的 场景
• 继承适用于类的重用 和拓展,接口适用于 不同类型的统一约束。
• 不同的应用场景需要 不同的设计方案。
继承和接口的对比
• 继承和接口可以结合 使用。
• 继承和接口都是面向 对象编程中的重要概 念,需要熟练掌握。
C语言程序设计(姜学峰版)PPT课件第十一章
8
5)定义结构体类型仅仅声明了一种数据结构,编译 系统不会为类型分配存储空间的;此时可用已定 义的结构体类型去定义结构体变量或数组,编译 系统将为结构体变量分配存储空间;
9
2. 定义结构体类型的变量 有三种方法: 1)先定义结构体类型,再用类型标识去定义变量 struct student stu1, stu2; struct student是已定义的结构体类型标识符; stu1、stu2是所定义的结构体变量;编译时将为 结构体变量分配各自的存储空间; 2)定义类型的同时定义变量 struct student { …; …; } stu1, stu2;
18
5. 结构体变量的指针、结构体成员的指针 注:&优先级为2级,低于.和[ ]; stu1 变量stu1的指针:&stu1 图示: num
num成员指针:&stu1. num
4
20 1
name第i个元素指针:&stu1. name[i]
name sex m
┇
birthday d 最低级成员y的指针:&stu1.birthday.y y score
5
例:定义可表示学生基本情况的结构体类型。
项目: 学号 姓名 性别 出生日期 成绩 电话号码 数据: 010510 Li Feng M 1981.5.4 680 029-8482500
类型: 长整/字串 字串
字符
字串
整型
字串
struct student /*结构体类型标识*/ { long num; char name[20]; char sex; char birthday[12]; float score; char tel[15]; };
基类和派生类
5
(1)公有继承(public)
当类的继承方式为公有继承时,基类的公有和保 护成员的访问属性在派生类中不变,而基类的私有 成员不可访问,
即基类的公有成员和保护成员被继承到派生类中 仍作为派生类的公有成员和保护成员,派生类的其 他成员可以直接访问它们。
具体赋值规则如下: 派生类的对象可以赋值给基类对象。 派生类的对象可以初始化基类对象的引用。 派生类对象的地址可以赋给指向基类对象的 指针。
15
例如: class A{...};
class B: public A
{void fun() {...}}; A a; B b; a=b; //将对象b中所含类A成员的值赋给对象a A &a1=b; //用派生类对象初始化基类对象的引用 A *pa =&b;
22
基类名1,继承方式2 基类名2,… {…} ;
{ 派生类类体
class C : public
};
A , private B
多重继承允许一个派生类同时继 {…} ; // C 公有
承多个基类中的成员,支持了软件 继承 A,私有继
的重用性,但也可能带来大量的二 承 B
义性问题。 17
复合与继承在软件渐增式开发中的应用
10
3.在派生类中重定义基类的函数
派生类自动继承了基类中定义的数据成员和成员函数。 如果派生类认为基类中某个成员函数的实现不能满足需 要,可以在派生类中重新定义该函数。
重定义基类的成员函数需要使用和该函数相同的函数 名和参数列表,如果参数列表不同,就是函数重载而不 是函数的重定义了。
C语言详细教程(完整版)ppt课件
C语言有很多种,如:Microsoft C、Turbo C、
Quick C、Borland C++、Visual C等。本课程通
.
过Turbo C的环境来学习C语言。
C Programming Language
三、C程序格式和结构特点
例1.1 第一个程序 Hello,World!
/* example1.1 The first C Program*/
– 答疑时间:星期四 12:00~13:30 – 地点:鉴主-12楼-计算机技术研究所 – 第6周到第18周
考试
. C Programming Language
上机安排
地点:南湖计算中心机房
时间:待定 上机内容:随教学进度根据配套的实验书( 上机调试每次课堂作业) 要求:
• 所有作业必须独立完成
• 作业必须经上机调试通过
. C Programming Language
开始
N=0
N<10吗?
Y
输入 X
X>=0吗? N N=N+1
N
结束
Y 输出 X
[例1.4] 输入10个数,求它们的平均值。
N=0, SUM=0 当N<10 输入X SUM=SUM+X N=N+1 AVER=SUM/10 输出AVER的值
. C Programming Language
定点法
数制转换
数值数据:二进制
浮点法
数据
西文:ASCII
非数值数据:编码 汉字:国标码
. C Programming Language
图形:……
有符定点整数
ds dn dn-1 dn-2 ……..
继承法PPT演示课件
9
二、继承法的概念与性质
(一)继承法的概念 继承法,是指调整因自然人的死亡而发
生的继承关系的法律规范的总称。 实质意义的继承法与形式意义的继承法。
10
(二)继承法的性质
1、继承法是私法。 2、继承法是一般法。 3、继承法是实体法。 4、继承法是强行法。 5、继承法是财产法。
15
三、法定继承人的范围
(一)配偶 (二)子女
• 与被继承人具有合法夫妻关系的人
• 生子女 • 养子女 • 形成抚养关系的继子女
(三)父母
• 生父母 • 养父母
• 形成抚养关系的继父母
16
(四)兄弟姐妹
• 自然血亲的兄弟姐妹 • 养兄弟姐妹 • 形成抚养关系的继兄弟姐妹
• 继兄弟姐妹之间有扶养关系
有权取得该财产的人所有的法律制度。
身份继承
广义的继承
财产继承
即狭义的继承
继承制度起源于古罗马法。
8
(二)继承的方式(遗产转移的方式)
1、法定继承
法律规定、基于身份,狭义
2、遗嘱继承与遗赠
3、遗赠扶养协议
4、无人继承也无人受遗赠的遗产处理
当事人、国家意志,广义财产继承
遗产转移方式的效力:
1、内容有冲突时,遗赠扶养协议 > 遗嘱继承与 遗赠 > 法定继承 > 无主财产
2、嫡优于庶。“立子以贵不以长”。 3、嫡长子优于嫡次子。“立嫡以长不以贤”。 4、先位之孙,优于次位之子。嫡长子死亡,嫡长孙 继承宗祧。 5、立嗣继后。绝户产一般立同宗近支卑亲属为嗣子。
唐律:首先立嫡长子;无嫡长子或有罪疾,立嫡长 孙;无嫡长孙,以次立嫡长子同母弟;无母弟,立庶子; 无庶子,立嫡长孙同母弟;无母弟,立庶孙。
民法典继承篇课件ppt
03
遗产的处理与分配
遗产的认定
01
遗产是自然人死亡时遗留的个人 合法财产,包括积极财产和消极 财产。
02
遗产的认定需遵循遗言优先、法 定继承次之的原则,同时需斟酌 继承人的人数、继承顺序等因素 。
遗产的分割
遗产分割应当有利于生产和生活需要 ,不侵害遗产的效用。
遗产分割可以采取均等分割、协商分 割、遗言分割等方式,具体分割方式 应根据实际情况选择。
法定继承的顺序
第一顺序为配偶、子女、父母,第二 顺序为兄弟姐妹、祖父母、外祖父母 。
法定继承的范围
法定继承人包括配偶、子女、父母等 近亲属。
法定继承的遗产分配原则
一般情况下,同一顺序的继承人应等 额继承遗产,但也可以根据具体情况 进行适当的调整。
遗言继承
遗言继承的定义
遗言的情势
遗言继承是指被继承人生前立有合法有效 的遗言,依照遗言指定的继承人、分配原 则和数额继承遗产的一种继承方式。
债权人有权要求继承人清偿被 继承人的债务,继承人应当在 遗产范围内承担清偿责任。
债务人有权要求继承人清偿债 务,继承人应当在遗产范围内 承担偿还责任。
债权人和债务人应当遵遵法律 规定,不得侵犯继承人的合法 权益。
05
特殊情况下的继承问题
涉外继承
涉外继承是指涉及外国因素的继 承案件,例如继承人或被继承人 具有外国国籍,或者遗产位于国
继承人应当妥善保管 遗产,不得私自转移 、隐匿或毁损。
遗产管理人的职责与义务
遗产管 性。
遗产管理人应当履行保密义务,不得 泄露被继承人的隐私和商业机密。
遗产管理人应当及时通知继承人办理 继承手续,并协助继承人处理相关事 务。
债权人与债务人的权益与义务
派生与继承
继承与派生
(2)改造。改造是指对吸收进来的基类成员的改 改造。 改造 造。它包括两个方面:一个是对基类成员访问 它包括两个方面: 控制的调整, 控制的调整,它是通过派生类定义时的继承方 式来确定。另一个就是对基类成员的隐藏, 式来确定。另一个就是对基类成员的隐藏,即 在派生类中声明一个与基类成员同名的新成员, 在派生类中声明一个与基类成员同名的新成员, 这个新成员就隐藏了上层的所有同名成员。 这个新成员就隐藏了上层的所有同名成员。这 时,在派生类中或者通过派生类的对象来直接 使用该成员名, 使用该成员名,就只能访问到派生类中声明的 同名成员,这称为同名隐藏或同名覆盖。 同名成员,这称为同名隐藏或同名覆盖。
继承与派生
继承性的具体实现也就是一个派生类的建立过程。 继承性的具体实现也就是一个派生类的建立过程。 class 派生类名 : 继承方式 基类名 继承方式 基类名 基类名1, 基类名2, … , 继承方式 基类名 基类名n { 新增派生类成员声明; 新增派生类成员声明 }; 继承方式关键字有三个: 继承方式关键字有三个:public、private、protected。 、 、 。 继承方式关键字只对紧随其后的基类起作用。 继承方式关键字只对紧随其后的基类起作用。 在继承与派生的过程中,一个基类可以派生出多个派生类, 在继承与派生的过程中,一个基类可以派生出多个派生类, 每一个派生类又可以作为基类再派生出新的派生类, 每一个派生类又可以作为基类再派生出新的派生类,基类和 派生类是相对而言的。这样,一代一代地派生下去, 派生类是相对而言的。这样,一代一代地派生下去,就形成 了一个相互关联的有层次的类的家族,称为类族。在类族中, 了一个相互关联的有层次的类的家族,称为类族。在类族中, 作为上下层直接联系而参与派生出某类的基类称为该派生类 的直接基类, 的直接基类,而基类的基类甚至更高层的基类则称为间接基 类。
C语言程序设计教程完整全套教学课件pptx
C语言与高级语言的关系
探讨C语言与Java、Python等高级语 言之间的联系与区别,以及各自适用 的场景。
C语言的特点与优势
阐述C语言高效、灵活、可移植等特 点,以及在系统级编程、嵌入式开发 等领域的广泛应用。
计算机系统基本概念
1 2 3
计算机系统的组成
介绍计算机硬件系统的基本组成,包括中央处理 器、内存、输入/输出设备等。
强制类型转换
通过类型转换运算符来实现,其一般 形式为“(类型说明符)(表达式) ”,其功能是把表达式的运算结果强 制转换成类型说明符所表示的类型。
03
控制结构
顺序结构
顺序结构的概念
按照代码的先后顺序,逐行 执行程序。
顺序结构的流程图
用箭头表示程序执行的顺序 。
顺序结构的应用场景
适用于简单的计算和输出任 务。
局部变量和全局变量
局部变量
在函数内部定义的变量,只在该函数内有效,不同函数中的局部变量互不影响。
全局变量
在函数外部定义的变量,可以在整个程序范围内访问,但过度使用全局变量会降低程序的可维护性和可读性。
模块化设计思想
模块化设计概念
01
将程序划分为若干个独立的功能模块,每个模块完成
特定的功能,提高程序的可维护性和可重用性。
&&、||、!等
运算符和表达式
位运算符
&、|、^、~、<<、>>等
赋值运算符
=、+=、-=、*=、/=等
条件运算符
?
运算符和表达式
逗号运算符
,
表达式
由运算符和操作数组成的式子,用于计算一个值
数据类型转换
自动类型转换
新标准C++程序设计5. 继承和派生
5
需要继承机制的例子
而不同的学生,又有各自不同的属性和方法 研究生 导师 系 大学生 系 中学生 竞赛特长加分
6
需要继承机制的例子
➢如果为每类学生都从头编写一个类,显然会有 不少重复的代码,浪费。
7
需要继承机制的例子
➢如果为每类学生都从头编写一个类,显然会有 不少重复的代码,浪费。
class CPoint {
double x,y; };
class CCircle:public CPoint {
double r; };
31
复合关系的使用
几何形体程序中,需要写“点”类,也需要写“圆”类
class CPoint {
double x,y; };
class CCircle:public CPoint {
class CStudent { private: string name; string id; //学号 char gender; //性别,'F'代表女,'M'代表男 int age; public: void PrintInfo(); void SetInfo( const string & name_,const string & id_, int age_, char gender_ ); string GetName() { return name; }
int v3; };
13
派生类对象的内存空间
派生类对象的体积,等于基类对象的体积,再加上派 生类对象自己的成员变量的体积。在派生类对象中,包 含着基类对象,而且基类对象的存储位置位于派生类对 象新增的成员变量之前。
继承法课件(培训讲座课件PPT)
三人死亡的时间推定
甲父先死,其次甲死,最后甲的儿子死
甲的妻子也死
9+5+5=19 甲的岳父
甲母 (6万) 甲父先死 12万 甲 (6万) 其次甲死
(9+6=15万)
=11
甲子死
(5万)
甲母 (5万) 甲妻 (5万) 甲子 (5万) 甲妻 (5万)
四、转移遗产的方式
法定继承 遗嘱继承 遗赠扶养协议
?三人死亡的时间推定?甲父先死其次甲死最后甲的儿子死?甲的妻子也死?12万?其次甲死?9615?甲子?甲子死?95519?甲的岳父?法定继承?遗嘱继承根据我国继承法的规定我国的财产继承有法定继承和遗嘱继承两种方式
继承法
重点内容:
一、遗产及范围
二、法定继承
三、遗嘱继承
一、继承法的概念、基本原则
继承法是调整财产继承关系的 法律规范的总称。
意外事件中被继承人死亡时间
案例讨论:
甲和父亲带着12岁的儿子进山打猎,遭 遇雪崩,三人全部遇难。闻听此讯,甲 的妻子当即悲痛而死。甲的母亲和甲的 岳父料理完丧事后,为争得甲父的12万 元遗产和甲与妻子共有的18万元财产发 生了争执,请问法院将如何判?
司法解释:
相互有继承关系的几个人在同一事件中死 亡,如不能确定死亡先后时间的,推定没 有继承人的人先死亡;死亡人各自都有继 承人的,推定辈份高者先死亡;几个人如 果辈份相同,则推定同时死亡,彼此不发 生继承,由他们各自的继承人分别继承。
公序良俗
公民立遗嘱的形式有五种:
1、公证遗嘱 2、自书遗嘱(亲笔书写,注明年、月、 日,署名) 3、代书遗嘱(两个以上无利害关系的见 证人,代书人、见证人、立遗嘱人签名, 注明年、月、日) 4、口头遗嘱(遗嘱人生命危急,两人以 上见证,记录人和见证人签名) 5、录音遗嘱(两人以上见证)
继承和派生习题与解析
vehicle类是基类由它派生出car类和truck类将公共 的属性和方法放在vehicle类中。 本题程序如下:
#include<iostream.h> class vehicle // 定义汽车类 {
protected: int wheels; // 车轮数 float weight; // 重量
解: 本题说明 派生类中含有对象成员情况下构造函数和析构函数
的调用顺序。这里base为基类,subs为派生类,subs类的构造 函数中含有对象成员。 所以输出为:
constrcuting base class n=1 constructing base class n=3 constructing sub class m=2 destructing sub class destructing base class destructing base class 注意:当派生类中含有对象成员时,构造函数的调用顺序如下: 1)基类的构造函数 2)对象成员的构造函数 3)派生类的构造函数
class subs:public base {
base bobj; int m; public:
subs(int a,int b,int c):base(a),bobj(c) {
cout<<"constructing sub cass"<<endl; m=b; cout<<"m="<<m<<endl; } ~subs(){cout<<"destructing sub class"<<endl;} }; void main() { subs s(1,2,3); }
精品课件-C++语言程序设计(刘瑞芳)-课程介绍
一一一一谢谢大家!!
变量的存放类型和生存期
函数调用的执行机制
主教材
基本知识
7.1 类和对象的定义
第一章 C++语言概述7.2构造函数
第二章 基本数据类型7.和3析表构达函式数
第三章 第四章 第五章 第六章 第七章 第八章
控制语句 7.4 面向对象程序设计
数函指组数针和和自引定用义对类象型数组编程技能
类与对象 使用对象传递函数参数
10
8
8
10
12
12
89
89
68
68
45
45
37
37
第4次 第5次
2 6 4 8 10 12 89 68 45 37
第6次
2 6 4 8 10 12 89 68 45 37
第7次
2 6 4 8 10 12 68 89 45 37
第8次
2 6 4 8 10 12 68 45 89 37
第9次
2 6 4 8 10 12 68 45 37 89
辅导教材
习题答 案详解
丰富的 案例提 高编程 能力
各种平 台下的 编译, 跨平台
开发
每章实 践题目, 逐步积
累
课程设 计:
图形用 户界面
网络通 信
文本分 析
辅导教材
侧重知识点的理解和
习题答
掌握
案详解
第6章 指针和引用
6.1 《C++语言程序设计》
丰富的 案例提 高编程 能力
习题及答案 6.2 编程案例及参考例 程 侧重编程能力的提6.3 实践题目 高
C语言(3学分)
第1章 第2章 第3章 第4章 第5章 第6章 第7章 第8章 第9章 第10章 第11章
C#派生和继承(派生类与基类)
C#派⽣和继承(派⽣类与基类)using System;using System.Collections.Generic;using System.Text;namespace继承{class Program{static void Main(string[] args){Mammal mammal = new Mammal();Console.WriteLine("我是⼀只哺乳动物");mammal.Scukle();mammal.Breate();mammal.Sleep();mammal.Message();}}class Mammal : Vertebrate//派⽣类:基类{private string arms;private string legs;private int age;public int Age{set { age = value; }get { return age; }}public Mammal(){arms = "前肢";legs = "后肢";Age = 0;Weigth = 10;Temperature = 37;}public void Scukle(){Console.WriteLine("哺乳");}public void Message(){Console.WriteLine("体重:{0}", Weigth);Console.WriteLine("年龄:{0}", Age);Console.WriteLine("体温:{0}", Temperature);Console.WriteLine("我有{0}和{1}", arms, legs);}}}using System;using System.Collections.Generic;using System.Text;namespace继承{class Vertebrate{private string spine;private double weigth;private double temperature;public double Weigth{set{if (value < 0){weigth = 0;}else{weigth = value;}}get { return weigth; }}public double Temperature{set{if (value < 0){temperature = 0;}else{temperature = value; }}get { return temperature; } }public Vertebrate(){spine = "脊柱";weigth = 0;temperature = 0;}public void Breate(){Console.WriteLine("呼吸"); }public void Sleep(){Console.WriteLine("睡觉"); }}}。
继承和派生复习
继承和派生练习一、选择题1、关于保护继承,下列说法错误的是()。
A、保护继承的特点是基类的所有公用成员和保护成员都成为派生类的保护成员。
B、派生类对象不能访问基类中的任何成员。
C、派生类的对象可以访问基类的公有成员。
D、保护继承的派生类和私有继承的派生类,对基类成员访问属性是相同的。
2、关于私有继承,下列说法错误的是()。
A、基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问他们。
B、基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员不能直接访问他们。
C、基类的私有成员,派生类的成员和派生类的对象都无法访问。
D、派生类的对象无法访问基类的所有成员。
3、在公有继承中,基类中的保护成员作为派生类的()。
A、公有成员B、私有成员C、保护成员D、私有成员函数4、基类()在派生类中的性质和继承的性质一样。
A、公有成员B、私有成员C、保护成员D、私有成员函数5、派生类的对象对它的基类成员中的()是可以访问的。
A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的私有成员6、C++类体系中,不能被派生类继承的有()。
A、构造函数B、虚函数C、静态成员函数D、赋值操作函数7、下列说法错误的是()。
A、公有继承的基类中的public成员在派生类中仍是public的B、公有继承的基类中的private成员在派生类中仍是private的C、私有继承的基类中的public成员在派生类中变成private的D、保护继承的基类中的public成员在派生类中变成protected的8、下列对继承的描述中,错误的是()。
A、析构函数不能被继承B、派生类也是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变9、下列对基类和派生类关系的描述中,错误的是()。
A、派生类是基类的具体化B、派生类是基类的子集C、派生类是基类定义的延续D、派生类是基类的组合10、C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
继承的分类
❖单继承:一个派生类只从一个基类派生 ❖多继承:一个派生类从多个基类派生
单继承
多继承
大学在册人员实例
教职工(单继承)
在册人员 学生(单继承)
兼职教师(单继承)
教师(单继承) 工人(单继承) 行政人员(单继承) 研究生(单继承)
大多数工程都尽可能使用可以重用的部件
软件重用在以下层次中
❖代码
❖功能 ❖模块或类
难度增加
❖子系统
❖应用系统
C++提供的大量库函数是在功能级的重用
MFC、OLE、ActiveX是在类一级的重用
软件重用的含义 简单而言,就是以现成的程序模块为基础,实现新的应用系统
小型模块重用的示例 ❖各种库函数
❖在类中包含C另一+个+类的支对象持成员重用的机制 重用的关注点: --类的继承
int num; 这是“对象组合”的限制
类s的trin“g n继am承e; ”机制能通过“剪裁”派生需要的类
char sex;
BirthDate birthday;
};
§ 继承与派生的概念
继承就是在一个已存在的类的基础上建立一 个新的类
已存在的类称为基类(base class)或父类 (father class)
private: 子对象是“部件”
int int
ymeoanr;th组; 合产生的新类对象“包含”子对象,因此
int day; ❖新类对象具有子对象的属性和功能
}; class
Teacher//❖教新师类类对象能增加新属性与新功能
{ public: ❖新类对象不能“修改”子对象的功能
┆
private:
❖现有的代码(界面)不需修改
❖能进行属性与方法的扩充:实现一些新的功能,但又不需从底层 开发。
❖能以规范的、标准的设计进行扩充
❖在类定义中包含其它类的对象成员(对象组合):可以重用其它 类定义的成员,但设计与使用没有统一的规范。
class BirthDate
//生日类
{ pu┆bli§c: 类的组合:在一个类中以另一个类的对象作为问基类中
访 问 控
的public和protected成员,但不能访问基类 的private成员。 派生类的对象只能访问基类的public成员。
制
//例2:
//派生c类la声ss明Student //声明基类
class {
{Student1:
publicp:ublic:
ccoouutt<<{<<″″
name: ″<<name<<endl; sex: ″<<sex<<endl;
//企图引用基类的私有成员,错误 //企图引用基类的私有成员,错误
coucot<u<t<″<n″aamgee:: ″″<<<<angaem<<e<en<denl;dl;
coucot<u<t<″<s″eaxd: d″r<e<sss:ex″<<<<eandddlr;<<endl;
}}
pprriivvaattee::
//基类私有成员
iinnttnaugme;;
//新增加的数据成员
第11章 继承与派生
信息学院信息技术教研室
整体概况
概况一
点击此处输入 相关文本内容
01
概况二
点击此处输入 相关文本内容
02
概况三
点击此处输入 相关文本内容
03
§ 面向对象程序设计4个主要特点
抽象 封装 继承:对现有的类重复利用 多态性:在继承的基础上,使程序设计更加
简单化
§ 关于软件重用(复用)
新建立的类称为派生类(derived class)或子 类(son class)
子类继承了父类 父类派生了子类 派生类是基类的具体化 基类则是派生类的抽象
现实世界的例子
交通工具
飞机
汽车
船
小汽车
卡车
旅行车
工具车
轿车
面包车
动物
猴子
猫
鸟
狮子
虎
猎豹
几 何形状
圆
矩形
派生类继承了基类的所有数据成员和成员函 数,并可以对成员作必要的增加或调整
public、private(私有的)、protected
❖派生类所声明的对基类的继承方式
public、private(私有的)、protected
公有继承(public)
类 成
基类的public和protected成员的访问属性在 派生类中保持不变,但基类的private成员在
员 派生类不可访问。
stsrtirninggnaadmder;;
//新增加的数据成员
}; char sex;
};
§ 派生类的构成
从基类接收成员
❖基类全部的成员接收过来(不包括构造函数 和析构函数)
❖在设计时充分考虑到派生类的要求
调整从基类接收的成员
❖可以改变基类成员在派生类中的访问属性 ❖同名覆盖原则
在声明派生类时增加的成员
// 例1:
c/l/a派ss生S类tud声en明t //声明基类
{class Student1: public Student //声明基类是Student
{public:
//基类公用成员
pvuobildicd: isplay( )
{void display_1( )
//新增加的成员函数
c{out<<″ num: ″<<num<<endl;
public
Student
//声明基类是Student
//基类公用成员
void dviospidlayg_e1t(_)value( ) //新增加的成员函数
{ { cin>>num>>name>>sex; }
cout<v<o″idnudmis:p″la<<yn(u)m<<endl; //企图引用基类的私有成员,错误
§ 派生类成员的访问属性
在讨论访问属性时,要考虑以下几种情况:
❖基类的成员函数访问基类成员 ❖派生类的成员函数访问派生类自己增加的成员 ❖基类的成员函数访问派生类的成员 ❖派生类的成员函数访问基类的成员 ❖在派生类外访问派生类的成员 ❖在派生类外访问基类的成员
派生类成员的访问属性决定因素
❖基类成员所声明的访问属性
行政人员兼教师 (多重继承)
研究生助教 (多重继承)
在职研究生 (多重继承)
§ 派生类的声明方式
一般形式
class 派生类名: [继承方式] 基类名 {
派生类新增加的成员 };
继承方式
❖ public(公有的、公用的) ❖ private(私有的) ❖ protected(受保护的) ❖ 默认为private(私有的)