C++面向对象程序设计教程下.ppt

上传人:自*** 文档编号:125035482 上传时间:2020-03-15 格式:PPT 页数:69 大小:2.14MB
返回 下载 相关 举报
C++面向对象程序设计教程下.ppt_第1页
第1页 / 共69页
C++面向对象程序设计教程下.ppt_第2页
第2页 / 共69页
C++面向对象程序设计教程下.ppt_第3页
第3页 / 共69页
C++面向对象程序设计教程下.ppt_第4页
第4页 / 共69页
C++面向对象程序设计教程下.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《C++面向对象程序设计教程下.ppt》由会员分享,可在线阅读,更多相关《C++面向对象程序设计教程下.ppt(69页珍藏版)》请在金锄头文库上搜索。

1、汇天地之长 育学子精英 C C 面向对象程序设计教程面向对象程序设计教程 下下 第 章 多态性 Chapter 6 Polymorphism 第 章 模板 Chapter 7 Template 3 6 7 3 千 里 之 行 始 于 足 下 所谓多态性就是不同对象收到相同的消息时 产 生不同的动作 通俗的说 多态性是指用一个名字定 义不同的函数 这些函数执行不同但又有类似的操作 即用同样的接口访问功能不同的函数 从而实现 一个接口 多种方法 4 千 里 之 行 始 于 足 下 class point int x y public point int a int b x a y b float

2、area return 0 0 class circle public point int radius public circle int x int y int rad point x y radius rad float area return 3 141 radius radius void main point p 20 20 circle c 8 8 30 cout p area endl cout c area endl cout c point area endl 5 2 函数重载 5 千 里 之 行 始 于 足 下 在基类和派生类中的函数重载有两种情况 1 参数有差别 2 函

3、数所带的参数完全相同 只是他们属于不同的类 通过 1 对象的不同加以区分 2 通过 类名 加以区分 6 千 里 之 行 始 于 足 下 5 3 运算符重载 int x y z z x y 这是将两个整数相加的方法 非常简单 若有一个复 数类complex class complex public double real double imag complex double r 0 double i 0 real r imag i 7 千 里 之 行 始 于 足 下 把complex的两个对象com1和com2加在一起 能否这样 实现 complex com1 1 1 2 2 com2 3 3

4、4 4 total1 total1 com1 com2 C 为运算符提供了一种方法 即在进行运 算符重载时 必须写一个运算符函数 其名字为 operator后随一个要重载的运算符 8 千 里 之 行 始 于 足 下 函数功能 operator 加法 operator 减法 operator 乘法 operator 除法 operator 小于 表5 1运算符函数 这样 编译器在一个运算符的两边 看 到自定义 的数据类型 就执行型用户自己的函数 而不是内部运 算符的常规程序 9 千 里 之 行 始 于 足 下 class complex public double real double ima

5、g complex double r 0 double i 0 real r imag i complex operator complex co1 complex co2 complex temp temp real co1 real co2 real temp imag co1 imag co2 imag return temp 10 千 里 之 行 始 于 足 下 void main complex com1 1 1 2 2 com2 3 3 4 4 total1 total2 total1 operator com1 com2 第一种使用方法 cout total1 real tota

6、l1 imag i total2 com1 com2 第二种使用方法 cout total2 real total2 imag i 11 千 里 之 行 始 于 足 下 一般而言 双目运算符 而aa和bb是类X的 两个对象 则以下两种函数调用方法是等价的 aa bb 隐式调用 operator aa bb 显示调用 12 千 里 之 行 始 于 足 下 注意 1 重载运算符要与原有功能类似 2 重载运算符 只能重载已有的运算符 程序员不能臆造 新的运算符来扩充C 语言 3 类属关系运算符 指针运算符 作用域运算 符 sizeof运算符不能被重载 4 不能改变运算符的操作数个数 例如 只能是 两

7、个操作数 5 不能改变运算符原有的优先级 x y a b 13 千 里 之 行 始 于 足 下 例 用 实现两个复数相乘 编程练习 14 千 里 之 行 始 于 足 下 class complex private double real double imag public complex double r 0 double i 0 real r imag i 思考 如何实现运算符重载呢 15 千 里 之 行 始 于 足 下 5 3 2 友元运算符函数 运算符重载函数是在类的外部定义的 这个 运算的重载函数只能访问类中的公有数据成员 而 不访问类的私有数据成员 解决办法是 1 定义为它将要操作

8、的类的成员函数 2 是定义类的友元函数 16 千 里 之 行 始 于 足 下 友元运算符函数定义的语法形式 class x friend 返回类型 operator运算符 形参表 17 千 里 之 行 始 于 足 下 class complex private double real double imag public complex double r 0 double i 0 real r imag i void print friend complex operator complex co1 complex co2 complex operator complex co1 comple

9、x co2 complex temp temp real co1 real co2 real temp imag co1 imag co2 imag return temp 18 千 里 之 行 始 于 足 下 void complex print cout 0 cout if imag 0 cout imag i void main complex com1 1 1 2 2 com2 3 3 4 4 total1 total2 total1 com1 com2 total1 print 19 千 里 之 行 始 于 足 下 例 用 实现两个复数类的加减乘除 编程练习 20 千 里 之 行 始

10、 于 足 下 5 3 3 成员运算符函数 成员运算符函数定义的语法形式 class X 返回类型 operator运算符 形参表 返回类型 X operator 运算符 形参表 函数体 21 千 里 之 行 始 于 足 下 1 单目运算符重载 在成员运算符函数的形参表中 若运算符是 单目的 则参数表为空 若运算符是双目的 则参 数表中有一个操作数 2 双目运算符重载 对双目运算符而言 成员运算符函数的形 参表仅有一个参数 它作为运算符的右操作数 此时当前对象作为运算符的左操作数 它是通过 this指针隐含地传递给函数的 22 千 里 之 行 始 于 足 下 class complex priv

11、ate double real imag public complex double r 0 double i 0 real r imag i void print complex operator complex co2 complex complex operator complex co2 complex temp temp real real co2 real temp imag imag co2 imag return temp 23 千 里 之 行 始 于 足 下 void complex print cout 0 cout if imag 0 cout imag 只能作为成 员函

12、数 双目运算符 建议重载为友元函数 29 千 里 之 行 始 于 足 下 5 3 5 和 的重载 我们知道 运算符 和 放置在变量的前面与后 面 其作用是有区别的 对于前缀方式 ob 可以定义成员运算符函 数为 class X public X operator 对于后缀方式ob 可以定义成员运算符函数为 class X public X operator int 30 千 里 之 行 始 于 足 下 class complex private double real double imag public complex double r 0 doublei 0 real r imag i v

13、oid print complex operator complex operator int complex complex operator complex temp temp real real temp imag imag return temp complex complex operator int complex temp temp real real temp imag imag return temp void complex print cout 0 cout if imag 0 cout imag i void main complex com1 1 1 2 2 tota

14、l1 total1 com1 total1 print 31 千 里 之 行 始 于 足 下 对于前缀方式 ob 也可以定义友元运算符函数为 class X public friend X operator X 对于后缀方式ob 可以定义友元运算符函数为 class X public friend X operator X 32 千 里 之 行 始 于 足 下 练习 请用成员函数重载 前缀方式 请用友元函数 重载 后缀方式 编程练习 33 千 里 之 行 始 于 足 下 5 3 7下标运算符 的重载 X Y 是一个双目运算符 可以看成 双目运算符 X 左操作数 Y 右操作数 X 5 可被解释为

15、X operator 5 对下标运算符重载定义只能使用成员函数 其形式如下 返回类型 类名 operator 形参表 函数体 34 千 里 之 行 始 于 足 下 class vector private int v 4 public vector int a1 int a2 int a3 int a4 v 0 a1 v 1 a2 v 2 a3 v 4 a4 int operator int bi void main vector v 1 2 3 4 cout v 2 35 千 里 之 行 始 于 足 下 class vector private int v 4 public vector i

16、nt a1 int a2 int a3 int a4 v 0 a1 v 1 a2 v 2 a3 v 4 a4 int operator int bi int vector operator int bi int i 0 if bi 4 cout 下标错误 exit 1 return v bi void main vector v 1 2 3 4 cout v 5 endl 36 千 里 之 行 始 于 足 下 5 3 8 函数调用运算符 的重载 X Y 是一个双目运算符 可以看成 双目运算符 X 左操作数 Y 右操作数 X 5 可被解释为X operator 5 对函数调用运算符重载只能使用成员函数 其形式如下 返回类型 类名 operator 形参表 函数体 通过this指针进行传递 37 千 里 之 行 始 于 足 下 class matrix private int m int row col public matrix int int int matrix matrix int r int c row r col c m new int row col for int i 0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号