C++程序设计基础教学课件作者安志远第4章运算符重载

上传人:E**** 文档编号:90582096 上传时间:2019-06-13 格式:PPT 页数:44 大小:285.50KB
返回 下载 相关 举报
C++程序设计基础教学课件作者安志远第4章运算符重载_第1页
第1页 / 共44页
C++程序设计基础教学课件作者安志远第4章运算符重载_第2页
第2页 / 共44页
C++程序设计基础教学课件作者安志远第4章运算符重载_第3页
第3页 / 共44页
C++程序设计基础教学课件作者安志远第4章运算符重载_第4页
第4页 / 共44页
C++程序设计基础教学课件作者安志远第4章运算符重载_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《C++程序设计基础教学课件作者安志远第4章运算符重载》由会员分享,可在线阅读,更多相关《C++程序设计基础教学课件作者安志远第4章运算符重载(44页珍藏版)》请在金锄头文库上搜索。

1、1,第4章 运算符重载,2,学习目标,理解运算符重载的含义 掌握运算符重载的一般规则 掌握C+中运算符重载的实现方法:重载为成员函数、重载为友元函数 熟练掌握C+中一些运算符的重载:+,-,(),等 掌握C+中类类型转换的实现,3,4.1 概述,运算符重载就是给已有运算符赋予更多的含义,使它能够用于特定类的对象执行特定的功能,而且使用形式与基本类型数据的形式相同。 运算符重载提供了重新定义语言、扩展语言的能力,使程序更加容易阅读和调试。运算符重载实际上就是函数重载。,4,4.2 运算符重载的一般规则,运算符重载具有以下原则: 1重载的运算符是C+中已经存在运算符,不能主观臆造。 2运算符重载不

2、能改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。 3运算符重载不能改变C+语言中已定义的运算符的优先顺序和结合性。 4运算符重载一般不改变运算符的功能。,5,4.2 运算符重载的一般规则,5不能重载的运算符有: (1)sizeof( )运算符; (2)成员运算符(.); (3)指向成员的指针运算符 (*); (4)作用域运算符(:); (5)条件运算符(?:); 6编译程序对运算符重载的选择遵循函数重载的选择规则。,6,4.3 用成员函数或友元函数重载运算符,4.3.1 用成员函数重载运算符 4.3.2 用友员函数重载运算符,7,4.3.1 用成员函数

3、重载运算符,运算符重载为类的成员函数的一般语法形式如下: operator (形参表) 函数体; 其中, (1)“类型”是作为成员函数的返回类型; (2)“类名”是重载该运算符的类; (3)“运算符”是要重载的运算符; (4)operator是关键字,是重载运算符标志; (5)“形参表”表示该运算符所需要的操作数,二元运算符重载为类的成员函数,它们包含一个形参,即运算符右侧的操作数。,8,例4.1 用成员函数重载算术运算符“+”。 #include class complex / complex类声明 private: double x,y; /实部为x,虚部为y public: comple

4、x(double xx=0,double yy=0) x=xx; y=yy; double getx() return x; /得到实部x值 double gety() return y; /得到虚部y值 void display() /输出复数 cout0)cout“ + “y“*i )“; else if(y0) couty“*i )“; else cout“ )“; complex operator +(complex ,9,4.3.1 用成员函数重载运算符,complex complex:operator +(complex ,10,4.3.2 用友员函数重载运算符,运算符重载为类的友

5、元函数的一般语法形式如下: friendoperator(形参表) 函数体; 其中: (1)函数类型指定了重载运算符的返回值类型,也就是运算结果类型。 (2)operator是定义运算符重载函数的关键字。 (3)运算符是要重载的运算符名称。 (4)形参表给出重载运算符所需要的参数和类型。 (5)friend是对于运算符重载为友元函数时,在函数类型说明之前使用的关键字。,11,例4.2 用友元函数重载算术运算符“*”。 #include class complex / complex类声明 private: double x,y; /实部为x,虚部为y public: complex(doubl

6、e xx=0,double yy=0) x=xx; y=yy; double getx() return x; /得到实部x值 double gety() return y; /得到虚部y值 void display() cout0)cout“+“y“*i )“; else if(y0) couty“*i )“; else coutendl; friend complex operator *(complex ,12,complex operator *(complex ,13,4.3.2 用友员函数重载运算符,注意: 当运算符重载为类的成员函数时,函数的参数个数比原来的操作数个数要少一个(后

7、置“+”、“-”除外); 当重载为类的友元函数时,参数个数与原操作数的个数相同。原因是重载为类的成员函数时,如果某个对象使用重载了的成员函数,自身的数据可以直接访问,就不需要再放在参数表中进行传递,少了的操作数就是该对象本身。,14,4.4 一些特殊操作符的重载,4.4.1 重载+与-运算符 4.4.2 重载赋值运算符 4.4.3 重载 和()运算符 4.4.4 重载插入()运算符,15,4.4.1 重载+与-运算符,1.重载为类的成员函数 增量运算符+和减量运算符-都是一元运算符,它们只有一个操作数。另外,增量运算符和减量运算符可以用于前缀或后缀运算形式。,16,4.4.1 重载+与-运算符

8、,例4.3 用成员函数重载运算符+。 #include class CPoint / CPoint类声明 private: long x,y; /横坐标为x,纵坐标为y public: CPoint (long xx=0,long yy=0) x=xx; y=yy; long getx() return x; /得到x值 long gety() return y; /得到y值 void display() cout“( “x“,“y“ )“endl; CPoint operator +(void); ;,17,4.4.1 重载+与-运算符,CPoint CPoint:operator +(vo

9、id) this-x= this-x+1; /+x; this-y= this-y+1; /+y; return *this; void main() CPoint p1(8,9); cout“Before p1+:“endl; cout“P1:“; p1.display(); p1+; /使用重载运算符+ cout“After p1+:“endl;,18,4.4.1 重载+与-运算符,cout“P1:“; p1.display(); coutendl“*n“endl; cout“Before +p1:“endl; cout“P1:“; p1.display(); +p1; /使用重载运算符+

10、 cout“After +p1:“endl; cout“P1:“; p1.display(); ,19,4.4.1 重载+与-运算符,2. 重载为类的友元函数 一元运算符重载为类的成员函数时,一般不需要显示说明参数。因为重载为类的成员函数,总是隐藏了一个参数,该参数是this指针。当重载为类的友元函数时,由于不存在隐含的this指针,对一元运算符来说,友元函数必须有一个参数。,20,4.4.1 重载+与-运算符,例4.4 用友元函数重载运算符+。 #include class CPoint private: long x; long y; public: CPoint() x = 0; y=0

11、; /无参数构造函数 CPoint(long xx,long yy) /单一参数构造函数 x = xx; y = yy; void display()cout “(”x”,”y”)”endl; friend CPoint operator+(CPoint ,21,4.4.1 重载+与-运算符,CPoint operator+(CPoint ,22,4.4.2 重载赋值运算符,1运算符“+=”和“-=”的重载 对于标准数据类型,“+=”和“-=”的作用是将一个数据与另一个数据进行加法或减法运算后再将结果回送给赋值号左边的变量中。对它们重载后,使其实现其他相关的功能。 2运算符“=”的重载 赋值运

12、算符“=”的原有含义是将赋值号右边表达式的结果拷贝给赋值号左边的变量,通过运算符“=”的重载将赋值号右边对象的私有数据依次拷贝到赋值号左边对象的私有数据中。,23,4.4.2 重载赋值运算符,例4.5 “+=”和“-=”运算符重载。 #include class Vector int x,y; public: Vector() ; Vector(int x1,int y1) x=x1;y=y1; friend Vector operator +=(Vector v1,Vector v2) v1.x+=v2.x; v1.y+=v2.y; return v1; ,24,4.4.2 重载赋值运算符,

13、Vector operator-=(Vector v) Vector tmp; tmp.x=x-v.x; tmp.y=y-v.y; return tmp; void display() cout”(“x”,”y”)”endl; ;,25,4.4.2 重载赋值运算符,void main() Vector v1(6,8),v2(3,6),v3,v4; cout”v1=”; v1.display(); cout”v2=”; v2.display(); v3=v1+=v2; cout”v3=”; v3.display(); v4=v1-=v2; cout”v4=”; v4.display(); ,26

14、,4.4.2 重载赋值运算符,例4.6 “=”运算符重载。 #include class Sample int n; public: Sample() Sample(int i) n=i; Sample ,27,4.4.2 重载赋值运算符,Sample ,28,4.4.3 重载 和()运算符,1. 重载 在C+中对数组不进行下标超界检查,利用C+类,通过重载 ,可定义一种更安全、功能更强的数组类型。 在重载下标运算符时,要注意,运算符函数只能有一个参数,不可带多个参数;不能用友元函数进行重载,且运算符函数必须是非静态成员函数。,29,例4.7 “=”运算符重载。 #include class

15、Demo int Vector5; public: Demo() ; int ,30,4.4.3 重载 和()运算符,2. 重载() 可以将函数调用运算符()看成是下标运算符 的扩展。函数调用运算符可以带0个或多个参数。下面通过示范实例来说明函数调用运算符的重载。,31,例4.8 “( )”运算符重载。 #include class Fun public: double operator()(double x,double y)const; ; double Fun:operator ()(double x,double y) const return (x*x+8)*y; void main() Fun f; coutf(2.5,7.8)endl; ,32,4.4.4 重载插入和提取运算符,C+的流提取()运算符和插入()运算符可用来输入输出标准类型的数据。 这两个运算符是C+编译器在类库中提供的,可以处理包括类C语言中的char *字符串和指针在内的每一种内部数据类型。 也可以重载这两个运算符以输入输出用户自定义类型的数据。,33,4.4.4 重载插入和提取运算符,例4.9 重载插入()运算符处理用户自定义类的数

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

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

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