第7单元 面向过程编程—— 继承与多态.

Slides:



Advertisements
Similar presentations
第三讲 面向对象(上).
Advertisements

项目7 面向对象高级.
第8章 面向对象的软件工程 8.1 软件工程的新途径 8.2 面向对象建模 8.3 对象模型 8.4 动态模型 8.5 功能模型.
Ch02物件導向程式設計 物件導向系統分析與設計.
四資二甲 第三週作業 物件導向程式設計.
第一章 面向对象程序设计.
第6章 多态性与虚函数.
程設一.
類別與物件 Class & Object.
第15章 繼承與多重繼承 15-1 繼承的基礎 15-2 覆寫與隱藏父類別的成員 15-3 子類別的建構與解構子 15-4 多重繼承
第八章 类和对象.
第5章 进一步讨论对象和类.
再回首: Java关键字 数据类型:byte boolean char double float int long short ,
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
程設一.
Ch08 巢狀類別 物件導向程式設計(II).
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
程式設計 博碩文化出版發行.
C#程序设计 c# programming 泛型 C#程序设计课程组.
第八章 C#高级编程.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
第二章 C# 基础知识.
第四章 在 C# 中实现 OOP 概念.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
第十一章 面向对象设计 第十二章 面向对象实现
Java基础 JavaSE异常.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
Java 程式設計 講師:FrankLin.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
哈夫曼编码.
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
软件建模精要 面向对象软件建模技术.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java软件设计基础 5. 继承与多态.
Java程序设计 第9章 继承和多态.
C#面向对象程序设计 $7 继承和多态性.
第四章 小技巧.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
软件学院 张 慧 清华大学软件学院.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
Ch02-基礎語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
辅导课程八.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
C#程序设计基础 $3 成员、变量和常量.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++复习2----类与对象.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
Inheritance -II.
第三章 数据抽象.
Object-Oriented Programming in C++ 第二章 类和对象
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
本节内容 对象拷贝 视频提供:昆山爱达人信息技术有限公司.
本节内容 引用类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
第6章 继承和多态 伍孝金
第十二章 C与C C转入C++时不需改变的内容 12.2 C转入C++的一些与类无关的 新特性
Presentation transcript:

第7单元 面向过程编程—— 继承与多态

发展自链表,但具有了新的特性,数据与操作! 什么是继承? 发展自链表,但具有了新的特性,数据与操作! 回忆链队类 class SLListQueue { SLList LstQue; Node *front,*rear; public: SLListQueue(){front=rear=LstQue.head->link;} //构造函数 ~SLListQueue(){} //析构函数 bool IsEmpty(){ return Length()==0;} //队空否? void EnQue(const DataType &); //进队 DataType DeQue(); //出队 DataType GetFront(); //查看队头数据 void MakeEmpty(); //置空队列 };

第八章 继承与多态 现实世界的层次结构 现实世界的层次结构 类继承层次结构 学校在 册人员 学生 教职工 本科生 研究生 教师 行政 人员 第八章 继承与多态 现实世界的层次结构 现实世界的层次结构 类继承层次结构 学校在 册人员 学生 教职工 本科生 研究生 教师 行政 人员 工人 硕士生 博士生

继承(inheritance):类的衍生与发展 第八章 继承与多态 继承(inheritance):类的衍生与发展 允许在保持原有类特性的基础上进行扩展,增加功能,从而产生新类(派生类)。 (1) 继承是面向对象程序设计中代码复用的最重要手段; (2) 继承能设计实现层次化的面向对象程序。 多态性(polymorphism):操作的多义性 表现了不同层次的类间,以及同一类中,同名的成员函数之间的关系。分成两类: (1) 编译时多态性: 函数的重载,运算符的重载; (2) 运行时多态性: 以虚函数为基础,是面向对象程序设计的标志性特征。

【例8.1】由在册人员类公有派生学生类 class Person { string IdPerson; //身份证号,18位数字 string Name; //姓名 bool Sex; //性别 int Birthday; //格式1986年8月18日写作19860818 string HomeAddress; //家庭地址 public: Person(string, string, Tsex, int, string); //构造函数 Person(); //默认的构造函数 ~Person(); //析构函数

【例8.1】由在册人员类公有派生学生类 //接口函数: void SetName(string); //修改名字 string GetName(){return Name;} //提取名字 void SetSex(Tsex sex){Sex=sex;} //修改性别 bool GetSex(){return Sex;} //提取性别 void SetId(string id){IdPerson=id;} //修改身份证号 string GetId(){return IdPerson;} //提取身份证号 void SetBirth(int birthday){Birthday=birthday;}//修改生日 int GetBirth(){return Birthday;} //提取生日 void SetHomeAdd(string ); //修改住址 string GetHomeAdd(){return HomeAddress;} //提取住址 void PrintInfo(); //打印个人信息 };

【例8.1】由在册人员类公有派生学生类 派生的学生类: class Student: public Person //定义派生的学生类 { string NoStudent; //学号 course cs[30]; //30门课程与成绩 public: Student(string id, string name,Tsex sex,int birthday, string homeadd, string nostud); //派生类构造函数 Student(); //默认派生类构造函数 ~Student(); //派生类析构函数 SetCourse(string , int); //课程设置 int GetCourse(string ); //查找成绩 void PrintInfo(); //打印学生情况 }; struct course{ string coursename; int grade; };

第八章 继承与多态 8.1 继承与派生的概念 8.4 虚基类 (选读) 8.2 派生类的构造函数与析构函数 8.5 派生类应用讨论 第八章 继承与多态 8.1 继承与派生的概念 8.4 虚基类 (选读) 8.2 派生类的构造函数与析构函数 8.5 派生类应用讨论 8.3 多重继承与派生类成员标识(选读) 8. 6 多态性与虚函数

层次概念: 8.1 继承与派生的概念 层次概念是计算机的重要概念。通过继承(inheritance)的机制可对类(class)分层。 8.1 继承与派生的概念 层次概念:   层次概念是计算机的重要概念。通过继承(inheritance)的机制可对类(class)分层。 C++通过类派生(class derivation)的机制来支持继承。被继承的类称为基类(base class)或超类(superclass),新的类为派生类(derived class)或子类(subclass)。 基类和派生类的集合称作类继承层次结构(hierarchy)。 如果基类和派生类共享相同的公有接口,则派生类被称作基类的子类型(subtype)。 派生反映了事物之间的联系,事物的共性与个性之间的关系。 派生与独立设计若干相关的类相比,前者工作量少,重复部分可以从基类继承来,不需要单独编程。

8.1 继承与派生的概念 8.1.1 类的派生与继承 8. 1.2 派生方式

8.1.1 类的派生与继承 派生类的定义: class 派生类名:访问限定符 基类名1《,访问限定符 基类名2,……,访问限定符 基类名n》 8.1.1 类的派生与继承 派生类的定义: class 派生类名:访问限定符 基类名1《,访问限定符 基类名2,……,访问限定符 基类名n》 { 《 《private: 》 成员表1;》 //派生类增加或替代的私有成员 《public: 成员表2;》 //派生类增加或替代的公有成员 《protected: 成员表3;》 //派生类增加或替代的保护成员 };//分号不可少 其中基类1,基类2,……是已声明的类。 在派生类定义的类体中给出的成员称为派生类成员,它们是新增加的成员,它们给派生类添加了不同于基类的新的属性和功能。派生类成员也包括取代基类成员的更新的成员。

单继承:派生类只有一个直接基类的情况称为单继承(single-inheritance)。 8.1.1 类的派生与继承 多重继承:如果一个派生类可以同时有多个基类,称为多重继承(multiple-inheritance),这时的派生类同时得到了多个已有类的特征。 单继承:派生类只有一个直接基类的情况称为单继承(single-inheritance)。 基类1 基类2 …… 基类n 基类 派生类1 派生类2 派生类1 派生类2 (a)多重继承 (b)单一继承 图8.1 多重继承与单一继承

8.1.1 类的派生与继承 层次化继承: 由基类派生出来的新类,同样可以作为基类再继续派生出更新的类,依此类推形成一个层次结构。直接参与派生出某类称为直接基类,而基类的基类,以及更深层的基类称为间接基类。 类族: 基类与其直接派生类、间接派生类,形成了一个相互关联的类的家族,称类族。如MFC就是这样的类族, 其中绝大多数类由CObject类派生出MFC类中的绝大多数。

8.1.1 类的派生与继承 派生类编写“四步曲”: Step 1. 吸收基类的成员 Step 2. 改造基类成员 Step 3. 发展新成员 8.1.1 类的派生与继承 派生类编写“四步曲”: Step 1. 吸收基类的成员 不论是数据成员,还是函数成员(除构造函数与析构函数)全盘接收 Step 2. 改造基类成员 声明和基类成员同名的新成员,派生类中的新成员就屏蔽了基类同名成员,同名覆盖(override) Step 3. 发展新成员 声明与基类成员不同名的派生类新成员,应能体现出派生类在功能上的发展。 Step 4. 重写构造函数与析构函数

8.1.1 类的派生与继承 为什么? 继承方式(派生类型): 访问限制符号及其强弱? 8.1.1 类的派生与继承 第二步中,新成员如是同名成员函数,参数表也必须一样,否则是重载。 第三步中,独有的新成员才是继承与派生的核心特征。 第四步派生类不继承重写构造函数与析构函数,不管原来的函数是否可用一律重写可免出错。 为什么? 继承方式(派生类型): 指定了派生类对基类成员的访问限制: 公有(public)方式,亦称公有继承 保护(protected)方式,亦称保护继承 私有(private)方式, 亦称私有继承。 访问限制符号及其强弱?

(2)派生类之外对派生类中的基类成员的访问。 8.1.2 公有派生与私有派生 访问限定符两方面含义: (1)派生类成员函数对基类的成员的访问; (2)派生类之外对派生类中的基类成员的访问。 派生类对基类成员的访问 基类访问限制派生类型 public protected private V X

公有派生是绝对主流! 8.1.2 公有派生与私有派生 派生类外访问其基类的成员访问 基类访问限制 派生类型 public protected private public(公有化) public V protected X private X protected(保护化) private (私有化) 公有派生是绝对主流!