C面向对象程序设计.ppt
《C面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1,C+面向对象程序设计,第十章 运算符重载与类模板,2,学习目标,理解为什么要进行运算符重载,在什么情况下要进行运算符重载 掌握通过成员函数重载运算符,借助友元函数实现运算符重载 理解引用在运算符重载中的作用,引用作为参数和返回值的好处和用法 理解类型转换的必要性,能够在程序设计中正确应用类型转换 理解为什么要引入类模板的概念,掌握类模板的应用,3,10.1 为什么要进行运算符重载,10.1.1 运算符重载的例子 在程序中,经常会使用运算符,但C+中已经定义的运算符都是针对基本数据类型的,那么能否将它们用于复杂的类对象呢?在学习本章之前,我们往往是编写实现相应运算功能的函数来解决复杂类型的运
2、算问题。首先来看一个复数加法运算的例子,请注意程序中,加法运算时表达式的书写形式。 【例6-1】复数的加运算。见教材P133,4,程序说明: 在【例10-1】为了解决复数的存储问题,在复数类Complex中,定义了两个私有成员变量:real(复数的实部)和imag(复数的虚部);并定义了公有的复数加法函数add()和友元输出函数print()显示复数。在main函数中定义了三个复数对象,使用加法函数add进行3个复数的相加,并输出结果。 在程序中三个复数相加的表达式为: c4 = c1.add(c2).add(c3); 用这种方式书写表达式,不仅形式复杂、不符合人们的日常书写习惯,而且不易理解
3、;复数的运算越复杂,书写的表达式越困难,给使用自定义类编写程序带来诸多不便。如果能够像使用基本类型那样用运算符来书写复数运算表达式(如c4 = c1+c2+c3;),不仅书写简单,也更容易理解;这正是在C+中引入了运算符重载的意义所在。下面通过使用运算符重载进行复数加运算例子来了解如何进行运算符的重载。,5,【例10-2】使用运算符重载进行复数加运算,见教材P134 输出结果: 11+2i 程序说明: 该程序的作用和【例10-1】相同,只是用运算符重载函数代替了加法函数。 比较两个程序不难发现,【例10-2】中书写的复数相加表达式,含义清晰,便于书写。让复数类的使用变得更加简易。 程序中“+”
4、运算符重载的定义如下: Complex operator +(Complex 它与一般函数的定义非常相似,不同的是运算符重载函数的名字(“operator +”)是由“operator”关键字和紧随其后的运算符“+”组成;关键字“operator”表明该函数是一个运算符重载函数。在【例10-2】中,该函数是作为类Complex的成员函数,因此把以这种方式的运算符重载称作重载为类运算符。,6,【例10-3】重载为友元运算符进行复数加运算,见教材P136 输出结果:11+2i 程序说明: 本例实现的功能与【例10-1】和【例10-2】完全相同。 本例中,“+”运算符重载函数的定义如下: Compl
5、ex operator +(Complex 由于该函数是一般的普通函数,不是类的成员函数,只是为能够访问类的私有数据成员,而把其声明为类的友元函数,因此在定义时参数表中必须指定两个参数:第1个参数作为运算符的左操作数,第2参数作为运算符的右操作数。,7,10.1.2 注意事项,C+对运算符重载作出了一定的限制和规定,在重载运算符时,需要注意以下几点: 不是所有运算符都可以被重载。 C+的大部分运算符都可以被重载。可以重载的运算符如下: new new delete delete + - * / % answer = c1 + c2 * c3; 在这个表达式中,乘法运算优先级高于加法运算,它等效
6、于 answer = c1 + (c2 * c3); 如同系统定义数据类型一样,可以使用括号强制改变重载运算符的计算顺序,例如: answer = (c1 + c2) * c3; 重载不能改变运算符的结合律。,9,重载不能改变运算符的操作数个数。 重载的一元运算符仍然是一元运算符,重载的二元运算符仍然是二元运算符。C+中唯一的三元运算符(?:)不能被重载。运算符 +、-、*、 /重载前增1运算符 T operator +(int); /重载后增1运算符 T operator -(); /重载前减1运算符 T operator -(int); /重载后减1运算符 为了说明增1运算符和减1运算符重
7、载,下面给出一个分数类作自增,自减的例子。【例6-5】分数类的自增,自减。 见教材P142,12,10.4 关系运算符的重载,在C+中对于使用内部数据类型定义的变量,可以使用六个关系运算符“、=、 = = 和 !=”进行比较运算。而要对自定义类定义的变量进行比较运算,用户就必须重载这些运算符。 下面以分数的 为例说明关系运算符的重载。 【例10-6】比较两个分数大小,输出值大的分数。见教材P144,13,10.5 算术赋值运算符的重载,在C+中允许把算术运算符和赋值运算符组合在一起使用,这种书写方法简洁高效;同样也可以在自定义类型中重载这些运算符。为了简单起见,仍然使用分数的例子。 【例10-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计
限制150内