c++运算符重载.pptx_第1页
c++运算符重载.pptx_第2页
c++运算符重载.pptx_第3页
c++运算符重载.pptx_第4页
c++运算符重载.pptx_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、运算符重载使得用户自定义的数据以一种更简洁的方式工作,例如 int x , y; y = x + y ;,matrix m1 , m2 ;/ 矩阵类对象 m1 = Madd ( m1 , m2 ) ;/ 调用函数计算两个矩阵的和,complex c1 , c2 ; / 复数类对象 c1 = Cadd (c1 , c2 ) ;/ 调用函数计算两个复数的和,能表示为 c1 = c1 + c2 ; ?,能表示为 m1 = m1 + m2 ; ?,第7章 运算符重载,定义 运算符重载函数,第7章 运算符重载,7.1 运算符重载规则,7.2 用成员或友元函数重载运算符,7.3 几个典型运算符重载,7.4

2、 类类型转换,小结,7.1 运算符重载规则,7.1.1 重载运算符的限制,可以重载的运算符 +-*/% class Calculator public: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter

3、 = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,例7-1 设计一个安全计数器,7.1.2 运算符重载的语法形式,#include #include using nam

4、espace std; class Calculator public: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i +

5、) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,重载了 3个运算符,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator p

6、ublic: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter =

7、Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,重载了 3个运算符,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calculator() value = 0

8、; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:o

9、perator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,void Calculator : operator + () if ( value 65535 ) value + ; else cout nData overflow ! endl ; exit( 0 ) ; ,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include u

10、sing namespace std; class Calculator public: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i =

11、5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,void Calculator : operator + () if ( value 65535 ) value + ; else cout nData overflow ! end

12、l ; exit( 0 ) ; ,使用 系统预定义版本,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for

13、( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,void Calcula

14、tor : operator - () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; ,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: un

15、signed short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; uns

16、igned short Calculator:operator() () return value ; ,void Calculator : operator - () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; ,使用 系统预定义版本,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; void ope

17、rator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + ()

18、 if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,+ Counter;,调用重载版本,void operator + () ;,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; void oper

19、ator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + ()

20、if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,调用重载版本,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,+ Counter;,void operator + () ;,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; void opera

21、tor + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () i

22、f ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,调用重载版本,Counter.operator+() ;,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,void operator + () ;,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ;

23、void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:opera

24、tor + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,- Counter;,调用重载版本,void operator - () ;,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; v

25、oid operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operat

26、or + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,调用重载版本,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,- Counter;,void operator - () ;,#include #include using namespace std; class Calculator public: Calculator() value = 0 ; ; vo

27、id operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operato

28、r + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,调用重载版本,Counter.operator-() ;,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,void operator - () ;,#include #include using namespace std; class Calculator public: Calculator() value

29、= 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,void Calculat

30、or:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,Counter () ;,调用重载版本,unsigned short operator () () ;,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public: Calcula

31、tor() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ; ,v

32、oid Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,Counter () ;,unsigned short operator () () ;,被重载的运算符,#include #include using namespace std; class Calculator pu

33、blic: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned int operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Cou

34、nter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned short Calculator:operator() () return value ; ,Counter () ;,Counter. operator() () ;,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,unsigned short operator () () ;,函数参数表,#include #include using

35、namespace std; class Calculator public: Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned short operator() () ; private: unsigned short value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i

36、 + ) - Counter; cout n Counter = Counter() ; ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; Unsigned short Calculator:operator() () return value ; ,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,#include #include using namespace std; class Calculator public:

37、Calculator() value = 0 ; ; void operator + () ; void operator - () ; unsigned int operator() () ; private: unsigned int value; ; int main() Calculator Counter ; int i ; for( i = 0 ; i 5 ; i + ) + Counter; cout n Counter = Counter() ; for( i = 0 ; i = 5 ; i + ) - Counter; cout n Counter = Counter() ;

38、 ,void Calculator:operator + () if ( value 0 ) value - ; else cout n Data overflow ! endl ; exit( 0 ) ; unsigned int Calculator:operator() () return value ; ,7.1.2 运算符重载的语法形式,例7-1 设计一个安全计数器,运算符函数可以重载为成员函数或友元函数 关键区别在于成员函数具有 this 指针,友元函数没有this指针 不管是成员函数还是友元函数重载,运算符的使用方法相同。 但传递参数的方式不同,实现代码不同,应用场合也不同,7.

39、2 用成员或友元函数重载运算符,重载为成员函数,解释为: Object . operator op () 操作数由对象Object通过this指针隐含传递 重载为友元函数,解释为: operator op (Object) 操作数由参数表的参数Object提供,7.2 用成员或友元函数重载运算符,1一元运算符,Object op 或 op Object,重载为成员函数,解释为: ObjectL . operator op ( ObjectR ) 左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递 重载为友元函数,解释为: operator op ( ObjectL,

40、 ObjectR ) 左右操作数都由参数传递,7.2 用成员或友元函数重载运算符,2二元运算符,ObjectL op ObjectR,当一元运算符的操作数,或者二元运算符的左操作数 是类的对象时,定义重载运算符函数为成员函数,7.2.1 用成员函数重载运算符,例7-2 建立一个描述3维坐标的类 Tri_Coor,重载运算符 “+”、“+”、和 “=” ,实现简单的算术运算,7.2.1 用成员函数重载运算符,7.2.1 用成员函数重载算符,7.2.1 用成员函数重载算符,#include using namespace std; class TriCoor public: TriCoor( in

41、t mx = 0, int my = 0, int mz = 0 ) x = mx ; y = my ; z = mz ; TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = x+t.x ; temp.y = y+t.y ; temp.z = z+t.z ; return temp ; TriCoor operator = ( TriCoor t ) x = t.x ; y = t.y ; z = t.z ; return * this ; TriCoor operator + () x + ; y + ; z + ; return

42、 *this ; void show() cout x , y , z n; void assign( int mx, int my, int mz ) x = mx; y = my; z = mz; private: int x, y, z ;/ 3_d coordinates ; int main() TriCoor a( 1, 2, 3 ), b, c ; a.show(); b.show(); c.show(); for( int i = 0; i 5; i + ) + b; b.show() ; c.assign( 3, 3, 3 ) ; c = a + b + c ; c.show

43、() ; c = b = a ; c.show() ; ,例7-2,#include using namespace std; class TriCoor public: TriCoor( int mx = 0, int my = 0, int mz = 0 ) x = mx ; y = my ; z = mz ; TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = x+t.x ; temp.y = y+t.y ; temp.z = z+t.z ; return temp ; TriCoor operator = ( TriCoor

44、 t ) x = t.x ; y = t.y ; z = t.z ; return * this ; TriCoor operator + () x + ; y + ; z + ; return *this ; void show() cout x , y , z n; void assign( int mx, int my, int mz ) x = mx; y = my; z = mz; private: int x, y, z ;/ 3_d coordinates ; int main() TriCoor a( 1, 2, 3 ), b, c ; a.show(); b.show();

45、c.show(); for( int i = 0; i 5; i + ) + b; b.show() ; c.assign( 3, 3, 3 ) ; c = a + b + c ; c.show() ; c = b = a ; c.show() ; ,TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = this-x+t.x ; temp.y = this-y+t.y ; temp.z = this-z+t.z ; return temp ; ,c = a + b + c ;,a + b a.operator + (b), Objec

46、t1,通过匿名对象Object1 返回运算结果,7.2.1 用成员函数重载算符,例7-2,7.2.1 用成员函数重载算符,#include using namespace std; class TriCoor public: TriCoor( int mx = 0, int my = 0, int mz = 0 ) x = mx ; y = my ; z = mz ; TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = x+t.x ; temp.y = y+t.y ; temp.z = z+t.z ; return temp ; T

47、riCoor operator = ( TriCoor t ) x = t.x ; y = t.y ; z = t.z ; return * this ; TriCoor operator + () x + ; y + ; z + ; return *this ; void show() cout x , y , z n; void assign( int mx, int my, int mz ) x = mx; y = my; z = mz; private: int x, y, z ;/ 3_d coordinates ; int main() TriCoor a( 1, 2, 3 ),

48、b, c ; a.show(); b.show(); c.show(); for( int i = 0; i 5; i + ) + b; b.show() ; c.assign( 3, 3, 3 ) ; c = a + b + c ; c.show() ; c = b = a ; c.show() ; ,TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = this-x+t.x ; temp.y = this-y+t.y ; temp.z = this-z+t.z ; return temp ; ,c = a + b + c ;,a

49、+ b a.operator + (b), Object1, a + b + c Object1 + c Object1.operator + (c),通过匿名对象Object2 返回运算结果, Object2,例7-2,#include using namespace std; class TriCoor public: TriCoor( int mx = 0, int my = 0, int mz = 0 ) x = mx ; y = my ; z = mz ; TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = x+t.x ;

50、 temp.y = y+t.y ; temp.z = z+t.z ; return temp ; TriCoor operator = ( TriCoor t ) x = t.x ; y = t.y ; z = t.z ; return * this ; TriCoor operator + () x + ; y + ; z + ; return *this ; void show() cout x , y , z n; void assign( int mx, int my, int mz ) x = mx; y = my; z = mz; private: int x, y, z ;/ 3

51、_d coordinates ; int main() TriCoor a( 1, 2, 3 ), b, c ; a.show(); b.show(); c.show(); for( int i = 0; i 5; i + ) + b; b.show() ; c.assign( 3, 3, 3 ) ; c = a + b + c ; c.show() ; c = b = a ; c.show() ; ,TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = this-x+t.x ; temp.y = this-y+t.y ; temp.

52、z = this-z+t.z ; return temp ; ,c = a + b + c ;,a + b a.operator + (b), Object1, a + b + c Object1 + c Object1.operator + (c), Object2, c = a + b + c ; c = Object2 ;,7.2.1 用成员函数重载算符,例7-2,#include using namespace std; class TriCoor public: TriCoor( int mx = 0, int my = 0, int mz = 0 ) x = mx ; y = my

53、 ; z = mz ; TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = x+t.x ; temp.y = y+t.y ; temp.z = z+t.z ; return temp ; TriCoor operator = ( TriCoor t ) x = t.x ; y = t.y ; z = t.z ; return * this ; TriCoor operator + () x + ; y + ; z + ; return *this ; void show() cout x , y , z n; void assign

54、( int mx, int my, int mz ) x = mx; y = my; z = mz; private: int x, y, z ;/ 3_d coordinates ; int main() TriCoor a( 1, 2, 3 ), b, c ; a.show(); b.show(); c.show(); for( int i = 0; i 5; i + ) + b; b.show() ; c.assign( 3, 3, 3 ) ; c = a + b + c ; c.show() ; c = b = a ; c.show() ; ,TriCoor operator = (

55、TriCoor t ) this-x = t.x ; this-y = t.y ; this-z = t.z ; return * this ; ,c = b = a ;,b = a b.operator = (a), c = b c.operator = (b),返回调用函数的对象,7.2.1 用成员函数重载算符,例7-2,#include using namespace std; class TriCoor public: TriCoor( int mx = 0, int my = 0, int mz = 0 ) x = mx ; y = my ; z = mz ; TriCoor operator + ( TriCoor t ) TriCoor temp ; temp.x = x+t.x ; temp.y = y+t.y ; temp.z = z+t.z ; return temp ; TriCoor operator = ( TriCoor t ) x = t.x ; y = t.y ; z = t.z ; return *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论