《第 四 章运算符重载.ppt》由会员分享,可在线阅读,更多相关《第 四 章运算符重载.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第 四四 章章 运算符重载4.14.1 重载运算符重载运算符4.24.2 自由存储自由存储4.34.3 类型转换类型转换 4.1.14.1.14.1.14.1.1 概述概述概述概述 4.1.24.1.24.1.24.1.2 一元和二元运算符一元和二元运算符一元和二元运算符一元和二元运算符 4.4.4.4.1.31.31.31.3 用成员用成员用成员用成员函函函函数数数数重载运算符重载运算符重载运算符重载运算符 4.1.44.1.44.1.44.1.4 用友员函数用友员函数用友员函数用友员函数重载运算符重载运算符重载运算符重载运算符4.1.54.1.54.1.54.1.5 重载重载重载重载+和
2、和和和-4.1.64.1.64.1.64.1.6 重载赋值运算符重载赋值运算符重载赋值运算符重载赋值运算符4.1.74.1.74.1.74.1.7 重载重载重载重载()()()()和和和和 4.14.1 重载运算符重载运算符4.1.14.1.1 概述概述1.1.运算符重载的需要运算符重载的需要运算符重载的需要运算符重载的需要 运算符重载使得用户自定义的数据以一种更简洁的方式工作运算符重载使得用户自定义的数据以一种更简洁的方式工作运算符重载使得用户自定义的数据以一种更简洁的方式工作运算符重载使得用户自定义的数据以一种更简洁的方式工作例如:例如:int int x,y x,yy=x+y;y=x+y
3、;matrix m1,m2;matrix m1,m2;/矩阵类对象矩阵类对象m2=m2=Madd Madd(m1,m2);(m1,m2);/调用函数计算两个矩阵的和调用函数计算两个矩阵的和complex c1,c2;complex c1,c2;/复数类对象复数类对象c1=c1=Cadd Cadd(c1,c2);(c1,c2);/调用函数计算两个复数的和调用函数计算两个复数的和能表示为能表示为能表示为能表示为c1=c1+c2;c1=c1+c2;?能表示为能表示为能表示为能表示为m1=m1+m2;m1=m1+m2;?4.1.14.1.1 概述概述2.2.C+C+中可以被重载的运算符中可以被重载的运
4、算符中可以被重载的运算符中可以被重载的运算符+-*/%&|!=+=+=-=-=*=*=/=/=%=%=&=&=|=|=!=!=&|+-()()-,newnew new newdeletedeletedeletedelete不能重载的算符不能重载的算符不能重载的算符不能重载的算符.:*?:?:#4.1.14.1.1 概述概述2.2.C+C+中可以被重载的运算符中可以被重载的运算符中可以被重载的运算符中可以被重载的运算符+-*/%&|!=+=+=-=-=*=*=/=/=%=%=&=&=|=|=!=!=&|+-()()-,newnew new newdeletedeletedeletedelete
5、运算符重载后,可以按它的表达方式使用运算符重载后,可以按它的表达方式使用运算符重载后,可以按它的表达方式使用运算符重载后,可以按它的表达方式使用 不能改变它们的优先级,不能改变算符要求的操作数数目不能改变它们的优先级,不能改变算符要求的操作数数目不能改变它们的优先级,不能改变算符要求的操作数数目不能改变它们的优先级,不能改变算符要求的操作数数目4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数
6、,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符
7、函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作返回类型返回类型4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相
8、对于该类定义的操作相对于该类定义的操作重载该算符的类的类名重载该算符的类的类名4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作要重载的算符要重载的算符4.1
9、.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作关键字关键字4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算
10、符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作由关键字和要重载算符组成函数名由关键字和要重载算符组成函数名4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算
11、符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作运算符要求的操作数运算符要求的操作数4.1.14.1.1 概述概述3.3.运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式运算符重载的语法形式 运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载。运算符通过运算符函数重载
12、。运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:运算符函数是一种特殊的成员函数,语法形式为:type X :operator (参数表参数表)/相对于该类定义的操作相对于该类定义的操作 一个一个一个一个运算符被重载后,原有意义没有失去,只是运算符被重载后,原有意义没有失去,只是运算符被重载后,原有意义没有失去,只是运算符被重载后,原有意义没有失去,只是 定义了相对一特定类的一个新运算符定义了相对一特定类的一个新运算符定义了相对一特定类的一个新运算符定义了相对一特定类的一个新运算符重载了重载了重载了重载了三个算
13、符三个算符三个算符三个算符/ex1 ex1 三个算符的重载三个算符的重载三个算符的重载三个算符的重载(P90-92)P90-92)#include#include.hclass counterclass counter unsigned unsigned int int value;value;public:public:counter()value=0;counter()value=0;void void operator +operator +();();void void operator-operator-();();unsigned unsigned int int operator
14、()operator()();();void counter:void counter:operator+operator+()()if (value 65535)value if (value 0)value if (value 0)value-;unsignedunsigned int int counter:counter:operator()operator()()()return value;return value;main()main()counter my_counter;counter my_counter;for(for(int int i=0;i 12;i i=0;i 1
15、2;i+)my_counter+;my_counter+;cout cout “n my_counter=”“n my_counter=”my_counter();my_counter();my_counter-my_counter-;my_counter-my_counter-;cout cout “n my_counter=”“n my_counter=”my_counter()my_counter();/ex1 ex1 三个算符的重载三个算符的重载三个算符的重载三个算符的重载(P90-92)P90-92)#include#include.hclass counterclass count
16、er unsigned unsigned int int value;value;public:public:counter()value=0;counter()value=0;void void operator +operator +();();void void operator-operator-();();unsigned unsigned int int operator()operator()();();void counter:void counter:operator+operator+()()if (value 65535)if (value 0)value if (val
17、ue 0)value-;unsignedunsigned int int counter:counter:operator()operator()()()return value;return value;main()main()counter my_counter;counter my_counter;for(for(int int i=0;i 12;i i=0;i 12;i+)my_counter+;my_counter+;cout cout “n my_counter=”“n my_counter=”my_counter();my_counter();my_counter-my_coun
18、ter-;my_counter-my_counter-;cout cout “n my_counter=”“n my_counter=”my_counter()my_counter();使用使用系统预定义版本系统预定义版本/ex1 ex1 三个算符的重载三个算符的重载三个算符的重载三个算符的重载(P90-92)P90-92)#include#include.hclass counterclass counter unsigned unsigned int int value;value;public:public:counter()value=0;counter()value=0;void v
19、oid operator +operator +();();void void operator-operator-();();unsigned unsigned int int operator()operator()();();void counter:void counter:operator+operator+()()if (value 65535)if (value 0)if (value 0)value-value-;unsignedunsigned int int counter:counter:operator()operator()()()return value;retur
20、n value;main()main()counter my_counter;counter my_counter;for(for(int int i=0;i 12;i i=0;i 12;i+)my_counter+;my_counter+;cout cout “n my_counter=”“n my_counter=”my_counter();my_counter();my_counter-my_counter-;my_counter-my_counter-;cout cout “n my_counter=”“n my_counter=”my_counter()my_counter();使用
21、使用系统预定义版本系统预定义版本/ex1 ex1 三个算符的重载三个算符的重载三个算符的重载三个算符的重载(P90-92)P90-92)#include#include.hclass counterclass counter unsigned unsigned int int value;value;public:public:counter()value=0;counter()value=0;void void operator +operator +();();void void operator-operator-();();unsigned unsigned int int opera
22、tor()operator()();();void counter:void counter:operator+operator+()()if (value 65535)if (value 0)if (value 0)value-value-;unsignedunsigned int int counter:counter:operator()operator()()()return value;return value;main()main()counter my_counter;counter my_counter;for(for(int int i=0;i 12;i=0;i 12;i+i
23、+)my_counter+;my_counter+;cout cout “n my_counter=”“n my_counter=”my_counter();my_counter();my_counter-my_counter-;my_counter-my_counter-;cout cout “n my_counter=”“n my_counter=”my_counter()my_counter();使用使用系统预定义版本系统预定义版本 “=”运算符重载不能被派生类继承运算符重载不能被派生类继承运算符重载不能被派生类继承运算符重载不能被派生类继承 由于重载可以对定义算符新的含义,要注意程序的
24、可读性由于重载可以对定义算符新的含义,要注意程序的可读性由于重载可以对定义算符新的含义,要注意程序的可读性由于重载可以对定义算符新的含义,要注意程序的可读性 例如:用运算符例如:用运算符“+”表示减运算;用表示减运算;用“*”表示除运算表示除运算 违反程序阅读习惯违反程序阅读习惯注意:注意:注意:注意:4.1.24.1.2 一元和二元运算符一元和二元运算符 运算符重载时,运算符函数只能定义为两种方式:运算符重载时,运算符函数只能定义为两种方式:运算符重载时,运算符函数只能定义为两种方式:运算符重载时,运算符函数只能定义为两种方式:类的成员函数类的成员函数类的成员函数类的成员函数 友员函数友员函
25、数友员函数友员函数这两种方式非常相似,关键区别在于这两种方式非常相似,关键区别在于这两种方式非常相似,关键区别在于这两种方式非常相似,关键区别在于成员函数成员函数成员函数成员函数具有具有具有具有 this this 指针指针指针指针友员函数友员函数友员函数友员函数没有没有没有没有 this this 指针指针指针指针1.1.一元运算符一元运算符一元运算符一元运算符 一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:aaaa 及及及及 aaaa重载
26、的运算符重载的运算符重载的运算符重载的运算符1.1.一元运算符一元运算符一元运算符一元运算符 一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:aaaa 及及及及 aaaa重载算符重载算符 的类的对象的类的对象重载算符重载算符 的类的对象的类的对象1.1.一元运算符一元运算符一元运算符一元运算符 一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一
27、元运算符,不论是前缀还是后缀,都需要一个操作数:aaaa 及及及及 aaaa可以解释为:可以解释为:aa.operator ()aa.operator ()或或operator (aa)operator (aa)1.1.一元运算符一元运算符一元运算符一元运算符 一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:aaaa 及及及及 aaaa可以解释为:可以解释为:aa.operator ()aa.operator ()或或operator (aa)
28、operator (aa)一元运算符函数一元运算符函数 operator 所需的一个操作数由对象所需的一个操作数由对象 aa通过通过this 指针隐含地传递,因此参数表为空。这时,运算符函指针隐含地传递,因此参数表为空。这时,运算符函数用类的数用类的成员函数成员函数表示表示1.1.一元运算符一元运算符一元运算符一元运算符 一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:aaaa 及及及及 aaaa可以解释为:可以解释为:aa.operator
29、()aa.operator ()或或operator (aa)operator (aa)一元运算符函数一元运算符函数 operator 所需的一个操作数在参数表中所需的一个操作数在参数表中由对象显式地提供,适用于没有由对象显式地提供,适用于没有this指针的情况。这时,运算符指针的情况。这时,运算符函数用类的函数用类的友员函数友员函数表示表示 一元运算符函数一元运算符函数 operator 所需的一个操作数由对象所需的一个操作数由对象 aa通过通过this 指针隐含地传递,因此参数表为空。这时,运算符函指针隐含地传递,因此参数表为空。这时,运算符函数用类的数用类的成员函数成员函数表示表示1.1
30、.一元运算符一元运算符一元运算符一元运算符 一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:一元运算符,不论是前缀还是后缀,都需要一个操作数:aaaa 及及及及 aaaa不管用成员函数或用友员函数重载运算符,不管用成员函数或用友员函数重载运算符,不管用成员函数或用友员函数重载运算符,不管用成员函数或用友员函数重载运算符,对运算符的使用方法都是相同的对运算符的使用方法都是相同的对运算符的使用方法都是相同的对运算符的使用方法都是相同的2.2.二元运算符二元运算符二元运算符二元运算符 同样,对任意二
31、元运算符同样,对任意二元运算符同样,对任意二元运算符同样,对任意二元运算符:aaaa bbbb可以解释为:可以解释为:aa.operator (bb)aa.operator (bb)或或operator (aa,bb)operator (aa,bb)2.2.二元运算符二元运算符二元运算符二元运算符 同样,对任意二元运算符同样,对任意二元运算符同样,对任意二元运算符同样,对任意二元运算符:aaaa bbbb可以解释为:可以解释为:aa.operator (bb)aa.operator (bb)或或operator (aa,bb)operator (aa,bb)二元运算符函数二元运算符函数 ope
32、rator 所需的一个操作数由对象所需的一个操作数由对象 aa通过通过 this 指针隐含地传递。因此它只有一个参数。这时,运算符指针隐含地传递。因此它只有一个参数。这时,运算符函数用类的函数用类的成员函数成员函数表示表示2.2.二元运算符二元运算符二元运算符二元运算符 同样,对任意二元运算符同样,对任意二元运算符同样,对任意二元运算符同样,对任意二元运算符:aaaa bbbb可以解释为:可以解释为:aa.operator (bb)aa.operator (bb)或或operator (aa,bb)operator (aa,bb)二元运算符函数二元运算符函数 operator 所需的一个操作数
33、由对象所需的一个操作数由对象 aa通过通过 this 指针隐含地传递。因此它只有一个参数。这时,运算符指针隐含地传递。因此它只有一个参数。这时,运算符函数用类的函数用类的成员函数成员函数表示表示 二元运算符函数二元运算符函数 operator 所需的两个操作数在参数表中所需的两个操作数在参数表中由对象由对象 aa 和和 bb显式地提供,适用于没有显式地提供,适用于没有this指针的情况。这时,指针的情况。这时,运算符函数用类的运算符函数用类的友员函数友员函数表示表示2.2.二元运算符二元运算符二元运算符二元运算符 同样,对任意二元运算符同样,对任意二元运算符同样,对任意二元运算符同样,对任意二
34、元运算符:aaaa bbbb不管用成员函数或用友员函数重载运算符,不管用成员函数或用友员函数重载运算符,不管用成员函数或用友员函数重载运算符,不管用成员函数或用友员函数重载运算符,对运算符的使用方法都是相同的对运算符的使用方法都是相同的对运算符的使用方法都是相同的对运算符的使用方法都是相同的4.1.34.1.3 用成员函数重载运算符用成员函数重载运算符 例:创建一个名为例:创建一个名为例:创建一个名为例:创建一个名为 three_d three_d 的简单类,的简单类,的简单类,的简单类,three three 类含有三维空间类含有三维空间类含有三维空间类含有三维空间中的一对象坐标。该程序相对
35、于中的一对象坐标。该程序相对于中的一对象坐标。该程序相对于中的一对象坐标。该程序相对于 three_d three_d 类对类对类对类对“+”和和和和“=”运算符进行重载。运算符进行重载。运算符进行重载。运算符进行重载。/ex2(ex2(例例例例4-14-1P94-96)P94-96)#include#include .h class three_dclass three_d int int x,y,z;x,y,z;/3_d coordinates/3_d coordinates public:public:three_d operator three_d operator+(three_d
36、t);(three_d t);/重载重载“+”three_d operator three_d operator=(three_d t);(three_d t);/重载重载“=”three_d operator three_d operator +();();/重载重载“+”void show();void show();void assign(void assign(int mx int mx,int int my,my,int mz int mz););three_d three_d:operator three_d three_d:operator+(three_d t)(three_d
37、 t)/重载重载“+”three_d temp;three_d temp;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;return temp;return temp;three_d three_d:operator three_d three_d:operator=(three_d t)(three_d t)/重载重载“=”x=t.x;y=t.y;z=t.z;return *this;x=t.x;y=t.y;z=t.z;return *this;three_d three_d:ope
38、rator three_d three_d:operator+()()/重载一元运算符重载一元运算符“+”x+;y+;z+;return *this;x+;y+;z+;return *this;void three_d:show()void three_d:show()/显示显示 x,y,z x,y,z 坐标坐标 coutcout x “,”y “,”z “n”;x “,”y “,”z “n”;void three_d:assign(void three_d:assign(int mx int mx,int int my,my,int mz int mz )/指定坐标指定坐标 x=x=mx m
39、x;y=my;z=;y=my;z=mz mz;three_d three_d:operator three_d three_d:operator+(three_d tthree_d t)/重载重载“+”three_d temp;three_d temp;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;return temp;return temp;three_d three_d:operator three_d three_d:operator=(three_d t)(three_d t
40、)/重载重载“=”x=t.x;y=t.y;z=t.z;return *this;x=t.x;y=t.y;z=t.z;return *this;three_d three_d:operator three_d three_d:operator+()()/重载一元运算符重载一元运算符“+”x+;y+;z+;return *this;x+;y+;z+;return *this;void three_d:show()void three_d:show()/显示显示 x,y,z x,y,z 坐标坐标 coutcout x “,”y “,”z “n”;x “,”y “,”z “n”;void three_
41、d:assign(void three_d:assign(int mx int mx,int int my,my,int mz int mz )/指定坐标指定坐标 x=x=mx mx;y=my;z=;y=my;z=mz mz;重载二元算符参数表只明确一个变元重载二元算符参数表只明确一个变元另一个变元用另一个变元用 this this 指针隐含传递指针隐含传递three_d three_d:operator three_d three_d:operator+(three_d tthree_d t)/重载重载“+”three_d temp;three_d temp;temp.x=temp.x=x
42、x+t.x;temp.y=y+t.y;temp.z=z+t.z;+t.x;temp.y=y+t.y;temp.z=z+t.z;return temp;return temp;three_d three_d:operator three_d three_d:operator=(three_d t)(three_d t)/重载重载“=”x=t.x;y=t.y;z=t.z;return *this;x=t.x;y=t.y;z=t.z;return *this;three_d three_d:operator three_d three_d:operator+()()/重载一元运算符重载一元运算符“+
43、”x+;y+;z+;return *this;x+;y+;z+;return *this;void three_d:show()void three_d:show()/显示显示 x,y,z x,y,z 坐标坐标 coutcout x “,”y “,”z “n”;x “,”y “,”z xthis-xthree_dthree_d three_d:operator three_d:operator+(three_d t)(three_d t)/重载重载“+”three_d temp;three_d temp;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;temp.x
44、=x+t.x;temp.y=y+t.y;temp.z=z+t.z;return temp;return temp;three_d three_d:operator three_d three_d:operator=(three_d t)(three_d t)/重载重载“=”x=t.x;y=t.y;z=t.z;return *this;x=t.x;y=t.y;z=t.z;return *this;three_d three_d:operator three_d three_d:operator+()()/重载一元运算符重载一元运算符“+”x+;y+;z+;return *this;x+;y+;z
45、+;return *this;void three_d:show()void three_d:show()/显示显示 x,y,z x,y,z 坐标坐标 coutcout x “,”y “,”z “n”;x “,”y “,”z “n”;void three_d:assign(void three_d:assign(int mx int mx,int int my,my,int mz int mz )/指定坐标指定坐标 x=x=mx mx;y=my;z=;y=my;z=mz mz;返回类类型,便于作复杂运算,例如返回类类型,便于作复杂运算,例如 a+b+ca+b+c事实上该函数可以返回任意正确事实
46、上该函数可以返回任意正确 C+C+类型类型three_d three_d:operator three_d three_d:operator+(three_d t)(three_d t)/重载重载“+”three_d temp;three_d temp;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;return temp;return temp;three_d three_d:operator three_d three_d:operator=(three_d t)(three_d t
47、)/重载重载“=”x x=t.x;=t.x;y y=t.y;=t.y;z z=t.z;return =t.z;return *this*this;three_d three_d:operator three_d three_d:operator+()()/重载一元运算符重载一元运算符“+”x+;y+;z+;return *this;x+;y+;z+;return *this;void three_d:show()void three_d:show()/显示显示 x,y,z x,y,z 坐标坐标 coutcout x “,”y “,”z “n”;x “,”y “,”z “n”;void thre
48、e_d:assign(void three_d:assign(int mx int mx,int int my,my,int mz int mz )/指定坐标指定坐标 x=x=mx mx;y=my;z=;y=my;z=mz mz;赋值运算符修改第一个操作数(赋值运算符修改第一个操作数(this this 所指对象)所指对象)返回对象类型,使得连续赋值合法返回对象类型,使得连续赋值合法a=b=c=d;a=b=c=d;three_d three_d:operator three_d three_d:operator+(three_d t)(three_d t)/重载重载“+”three_d tem
49、p;three_d temp;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;temp.x=x+t.x;temp.y=y+t.y;temp.z=z+t.z;return temp;return temp;three_d three_d:operator three_d three_d:operator=(three_d t)(three_d t)/重载重载“=”x=t.x;y=t.y;z=t.z;return *this;x=t.x;y=t.y;z=t.z;return *this;three_d three_d:operator three_d three_d:
50、operator+()()/重载一元运算符重载一元运算符“+”x+;y+;z+;return *this;x+;y+;z+;return *this;void three_d:show()void three_d:show()/显示显示 x,y,z x,y,z 坐标坐标 coutcout x “,”y “,”z “n”;x “,”y “,”z “n”;void three_d:assign(void three_d:assign(int mx int mx,int int my,my,int mz int mz )/指定坐标指定坐标 x=x=mx mx;y=my;z=;y=my;z=mz mz