C++面向对象程序设计 教学课件 ppt 作者 陈维兴 陈昕 C++邮电-7

上传人:E**** 文档编号:89344286 上传时间:2019-05-23 格式:PPT 页数:82 大小:777.50KB
返回 下载 相关 举报
C++面向对象程序设计 教学课件 ppt 作者  陈维兴 陈昕 C++邮电-7_第1页
第1页 / 共82页
C++面向对象程序设计 教学课件 ppt 作者  陈维兴 陈昕 C++邮电-7_第2页
第2页 / 共82页
C++面向对象程序设计 教学课件 ppt 作者  陈维兴 陈昕 C++邮电-7_第3页
第3页 / 共82页
C++面向对象程序设计 教学课件 ppt 作者  陈维兴 陈昕 C++邮电-7_第4页
第4页 / 共82页
C++面向对象程序设计 教学课件 ppt 作者  陈维兴 陈昕 C++邮电-7_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《C++面向对象程序设计 教学课件 ppt 作者 陈维兴 陈昕 C++邮电-7》由会员分享,可在线阅读,更多相关《C++面向对象程序设计 教学课件 ppt 作者 陈维兴 陈昕 C++邮电-7(82页珍藏版)》请在金锄头文库上搜索。

1、,第7章 运算符重载 7.1 运算符重载概述 7.2 运算符重载函数作为类的友元函数和成员函数 7.3 前置运算符和后置运算符的重载 7.4 重载插入运算符和提取运算符 7.5 不同类型数据间的转换,本章主要内容,7.1 运算符重载概述 用于完成“+”、 “-”、 “*”、 “”等操作的函数为运算符函数。 C+规定运算符函数名为: operator+ operator- operator* operator 等 统称为: operator ( -要重载的运算符),运算符函数名,两个或者两个以上的运算符函数共用一个运算符函数名为运算符函数重载。 C+系统已经预先编好了将两个基本数据类型相加的的运

2、算符函数,可以直接使用它们。 1.求两个整数相加,例如: int i=2+3; 2.求两个双精度数相加,例如: double d=2.222+3.333 ;,运算符函数重载,调用预先编好的将两个整型数相加的的运算符函数,调用预先编好的将两个双精度数相加的的运算符函数,C+系统预先编好的运算符函数不能完成将两个对象的相加工作。 例如:有一个复数类complex: class complex public: double real,imag; complex(double r=0,double i=0) real=r; imag=i; ;,实现两个对象相加的运算符函数,若要把类complex的两个

3、对象com1和com2加在一起: int main() complex com1(1.1,2.2),com2(3.3,4.4); complex total; total = com1 + com2; /错误 / return 0; ,C+系统预先编好的运算符函数不能将两个对象的相加,解决办法:用户自己编写一个实现两个对象相加的运算符函数,例如: int main() complex com1(1.1,2.2),com2(3.3,4.4); complex total; total = com1+com2; / return 0;,就能将类complex的两个对象com1和com2相加,com

4、plex operator+(complex co1,complex co2) ,将类complex的两个对象相加的运算符函数operator+( ): complex operator+(complexco1,complex co2) complex temp; temp.real=co1.real+co2.real; temp.imag=co1.imag+co2.imag; return temp; ,调用语句:total=operator+(com1,com2); 或: total=com1+com2;,就能将类complex的两个对象com1和com2相加,例7.1-1 将两个comp

5、lex类对象相加。 #include using namespace std; class complex public: double real, imag; 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; ,运算符函数 operator+(),main( ) complex com1(1.1,

6、2.2),com2(3.3,4.4),total1,total2; total1=operator+(com1,com2); cout“real1=“total1.real; cout “ imag1=“ total1.imag endl; total2=com1+com2; cout“real2=“total2.real; cout “ imag2=“total2.imag endl; return 0; ,调用运算符函数operator+()的第1种方式,调用运算符函数 operator+()的第2种方式,运行结果如下: real1=4.4 imag1=6.6 real2=4.4 imag

7、2=6.6,#include class complex public: double real, imag; 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; ,运算符函数 operator+(),例7.1-1 是一个类外定义的运算符函数,只能访问公有数据成员,而不能访问类的私有数据成员。,公有的

8、数据成员,例7.1-1存在的问题,但是,实际上类中的数据成员常常是私有成员或保护成员,解决办法: (1) 定义为它将要操作的类的成员函数(简称为成员运算符重载函数); (2) 定义为它将要操作的类的友元函数(简称为友元运算符重载函数)。,7.2 运算符重载函数作为类的友元函数和成员函数 7.2.1 运算符重载函数作为类的友元函数 7.2.2 运算符重载函数作为类的成员函数 7.2.3 运算符重载应该注意的几个问题,本节主要内容,7.2.1 运算符重载函数作为类的友元函数 在C+中,可以把运算符函数定义成某个类的友元函数,称为 友元运算符重载函数 。 1. 运算符重载函数作为类的友元函数的语法形

9、式 (1)在类的内部,定义友元运算符重载函数的格式如下:,friend 函数类型 operator运算符(形参表) 函数体 ,(2) 友元运算符重载函数也可以在类中声明友元函数的原型,在类外定义。 在类中,声明友元运算符重载函数原型的格式如下: 在类外,定义友元运算符重载函数的格式如下:,class X friend 返回类型 operator运算符(形参表); ;,返回类型 operator运算符(形参表) 函数体 ,例如:两个complex对象进行“+”法运算的友元运算符函数。 class complex friend complex operator+(complex co1,compl

10、ex co2); /. . . ; complex operator+(complex co1,complex co2) /. . . ,在类的内部声明原型,在类外定义友元运算符函数,友元运算符函数定义时: 若重载的是双目运算符,则参数表中有两个操作数; 若重载的是单目运算符,则参数表中只有一个操作数。,2. 用友元函数重载双目运算符 双目运算符有两个操作数,通常在运算符的左右两侧, 例如: 3+5, 2412 当用友元函数重载双目运算符时,两个操作数都要传递给运算符重载函数。,#include / 例7.2-1 class complex double real, imag; public:

11、 friend complex operator+(complex co1,complex co2); complex(double r=0,double i=0) real=r; imag=i; void print() cout“real=“real“ imag=“imagendl; complex operator+(complex co1,complex co2) complex temp; temp.real=co1.real+co2.real; temp.imag=co1.imag+co2.imag; return temp; main( ) complex com1(1.1,2.

12、2),com2(3.3,4.4),total1,total2; total1=operator+(com1,com2); total1.print(); total2=com1+com2; total2.print(); return 0; ,声明友元运算符函数operator+()原型,定义友元运算符函数operator+(),调用operator+()的第1种方式,调用operator+()的第2种方式,运行结果如下: real=4.4 imag=6.6 real=4.4 imag=6.6,若双目友元运算符函数operator 所需的两个操作数aa和bb在参数表提供。 一般而言,可以采用以

13、下两种方法使用: aa bb; /隐式(习惯)调用 operator(aa,bb);/显式调用 如上例中: com1+com2 operator+(com1,com2),说明: (1) 在函数返回的时候,有时可以直接用类的构造函数来生成一个临时对象,而不对该对象进行命名。 例如: Complex operator+(Complex ,建立一个临时对象,它没有对象名,是一个无名对象。在建立临时对象过程中调用构造函数。return语句将此临时对象作为函数返回值。,(2) Visual C+6.0提供的不带后缀的.h的头文件不支持友元运算符重载函数,在Visual C+6.0中编译会出错,这时可采用

14、带后缀的.h头文件。 这时可将程序中的 #include using namespace std; 修改成 #include 例如:例7.2-1中的: #include class complex double real, imag; public: friend complex operator+(complex co1,complex co2); complex(double r=0,double i=0) real=r; imag=i; void print() cout“real=“real“ imag=“imagendl; ;,取代原程序中的: #include using name

15、space std;,3. 用友元函数重载单目运算符 单目运算符只有一个操作数, 例如: -a, &b, !c, +p 用友元函数重载单目运算符时,需要一个显式的操作数。,#include /例7.3-1友元函数重载单目运算符“+” class coord int x,y; public: coord(int i=0,int j=0); void print(); friend coord operator+(coord op); ; coord:coord(int i,int j) x=i; y=j; void coord:print( ) cout“ x: “x“ , y: “yendl;

16、 coord operator+(coord op) +op.x; +op.y; return op; main( ) coord ob(10,20); ob.print( ); operator+(ob); ob.print( ); +ob; ob.print( ); return 0; ,声明友元运算符函数operator+( )原型,定义友元运算符函数operator+( ),显式调用,隐式调用,运行结果如下: x=10 y=20 x=10 y=20 x=10 y=20,为什么不是? x=10 y=20 x=11 y=21 x=12 y=22,#include /例7.3-1友元函数重载单目运算符

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

当前位置:首页 > 高等教育 > 大学课件

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