清华大学:《C++语言程序设计》课程教学资源(PPT课件)第八章 多态性

C++语言程序设计 第八章多性
1 第八章 多态性 C++语言程序设计

C++语言程序设计 本章主要内容 多态性 运算符重载 虚函数 纯虚函数 ●抽象类 x
C++语言程序设计 2 本章主要内容 ⚫ 多态性 ⚫ 运算符重载 ⚫ 虚函数 ⚫ 纯虚函数 ⚫ 抽象类

C++语言程序设计 多态性的概念 ●多态性是面向对象程序设计的重要特征之一。 多态性是指发出同样的消息被不同类型的对象 接收时有可能导致完全不同的行为。 多态从实现的角度来讲可以划分为两类:编译 时的多态和运行时的多态。前者是在编译的过 程中确定了同名操作的具体操作对象,而后者 则是在程序运行过程中才动态地确定操作所针 对的具体对象。 x
C++语言程序设计 3 多态性的概念 ⚫ 多态性是面向对象程序设计的重要特征之一。 ⚫ 多态性是指发出同样的消息被不同类型的对象 接收时有可能导致完全不同的行为。 ⚫ 多态从实现的角度来讲可以划分为两类:编译 时的多态和运行时的多态。前者是在编译的过 程中确定了同名操作的具体操作对象,而后者 则是在程序运行过程中才动态地确定操作所针 对的具体对象

C++语言程序设计 多态的形式 ●常见形式 函数重载 运算符重载 虚函数 x
C++语言程序设计 4 多态的形式 ⚫ 常见形式 – 函数重载 – 运算符重载 – 虚函数

C++语言程序设计 为何要重载运算符? C++把用户定义的类和基本数据类型一样看待。 系统为基本数据定义了运算符(如++)。C++ 中预定义的运算符其运算对象只能是基本数据 类型,而不适用于用户自定义类型(如类)。 ●允许用户自定义的类类型定义这些运算符。 重新定义运算符的运算规则就称为重载运算符。 运算符重载能提高程序可读性,但并不是必须 的 运算符重载看作类中提供的另一种形式的接口
C++语言程序设计 5 为何需要重载运算符? ⚫ C++把用户定义的类和基本数据类型一样看待。 系统为基本数据定义了运算符(如+-*/)。C++ 中预定义的运算符其运算对象只能是基本数据 类型,而不适用于用户自定义类型(如类)。 ⚫ 允许用户自定义的类类型定义这些运算符。 ⚫ 重新定义运算符的运算规则就称为重载运算符。 ⚫ 运算符重载能提高程序可读性,但并不是必须 的。 ⚫ 运算符重载看作类中提供的另一种形式的接口

C++语言程序设计 问题举例 复数的运算 算符重 class complex∥复数类声明 publIc 载{ complex( double r=0.0, double i=0.0)∥构造函数 real=r; imag=i; void display;∥显示复数的值 complex add( complex c2);∥成员函数 private double real: double imag; x
C++语言程序设计 6 问题举例——复数的运算 class complex //复数类声明 { public: complex(double r=0.0,double i=0.0) //构造函数 { real=r; imag=i; } void display(); //显示复数的值 complex add(complex c2); //成员函数 private: double real; double imag; }; 运 算 符 重 载

C++语言程序设计 complex complex add(complex C2) complex c, creal=c2 realtreal: C imag=c2 imag+imag; return complex(c real, C imag) int main()∥主函数 complex c1(5,4)c2(2,10)c3; C3=C1.add(c2); return 0: x
C++语言程序设计 7 complex complex::add(complex c2) { complex c; c.real=c2.real+real; c.imag=c2.imag+imag; return complex(c.real,c.imag); } int main() //主函数 { complex c1(5,4),c2(2,10),c3; c3=c1.add(c2) ; return 0; }

C++语言程序设计 问题举例 复数的运算 算。用“+”、“能够实现复数的加减运 算吗? 重 载 complex c1(5,4)c2(2,10),c3; c3=c1+c2; ●实现复数加减运算的方法 重载“+”、“运算符, x
C++语言程序设计 8 问题举例——复数的运算 ⚫ 用“+”、“-”能够实现复数的加减运 算吗? complex c1(5,4),c2(2,10),c3; c3=c1 + c2; ⚫ 实现复数加减运算的方法 ——重载“+”、“-”运算符 运 算 符 重 载

C++语言程序设计 complex complex: operator +(complex c2) complex C) creal=c2.realtreal C.imagc2 imag+imag return complex(c real, c imag); int main()∥主函数 complex c1(5,4)c2(2,10)c3; c3=c1+c2;相当于c1. operator+(c2) return 0;
C++语言程序设计 9 complex complex:: operator +(complex c2) { complex c; c.real=c2.real+real; c.imag=c2.imag+imag; return complex(c.real,c.imag); } int main() //主函数 { complex c1(5,4),c2(2,10),c3; c3=c1+c2; //相当于c1.operator+(c2) return 0; }

C++语言程序设计 运算符重载的奥质 算。运算符重载是对已有的运算符赋予多 符重含义,实质就是函数重载。 重。实现机制 载将指定的运算表达式转化为对运算符函 数的调用,运算对象转化为运算符函数 的实参。 编译系统对重载运算符的选择,遵循函 数面找的用则据实的关x
C++语言程序设计 10 运算符重载的实质 ⚫ 运算符重载是对已有的运算符赋予多 重含义,实质就是函数重载 。 ⚫ 实现机制 – 将指定的运算表达式转化为对运算符函 数的调用,运算对象转化为运算符函数 的实参。 – 编译系统对重载运算符的选择,遵循函 数重载的选择原则。(根据实参的类型 来确定需要调用的函数) 运 算 符 重 载
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第七章 继承与派生.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第六章 数组、指针与字符串.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第五章 C++程序的结构.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第九章 文件.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第八章 排序.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第七章 查找.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第六章 图.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第五章 树和二叉树.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第四章 串和数组.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第三章 栈和队列.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第二章 线性表.ppt
- 人民邮电出版社:高职高专现代信息技术系列教材《数据结构》课程电子教案(PPT课件讲稿)第一章 数据结构基础概论.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第9章 数组.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第8章 函数.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第7章 循环结构程序设计.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第6章 选择结构程序设计.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第5章 顺序结构程序设计.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第4章 数据类型及表达式.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第3章 C语言概述.ppt
- 人民邮电出版社:高等学校教材《C程序设计》课程教学资源(PPT课件)第2章 程序设计基础知识.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第九章 群体类和群体数据的组织.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十章 C++标准模板库.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十一章 流类库与输入/输出.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十二章 异常处理.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)课程简介(李莉).ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第一章 绪论.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第二章 C++简单程序设计.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第三章 函数.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第四章 类与对象.ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第二章 线性表.ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第九章 查找.ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第六章 树和二叉树.ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第三章 栈和队列.ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第十章 排序.ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第四章 字符串(String).ppt
- 天津大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第一章 绪论(李晓红).ppt
- 人民邮电出版社:网页及HTML语言.ppt
- 高等教育出版社:《电子商务概论》课程教学资源(PPT电子教案)第一章 电子商务概述(宋文官).ppt
- 高等教育出版社:《电子商务概论》课程教学资源(PPT电子教案)第七章 典型解决方案.ppt
- 高等教育出版社:《电子商务概论》课程教学资源(PPT电子教案)第三章 EDI电子商务.ppt