《黄建的ppt教学课件,c++_07_运算符重载》由会员分享,可在线阅读,更多相关《黄建的ppt教学课件,c++_07_运算符重载(21页珍藏版)》请在金锄头文库上搜索。
1、7,运算符重载,7,运算符重载,本章内容,运算符重载,运算符所构成的表达式的类型应说明为函数的返回类型。,运算符重载,运算符重载是针对C+原有运算符进行的,不能通过运算符重载创造出新的运算符。,重载的运算符称为运算符函数,函数名就是operator ,例如:operator + 。,与运算符相关的操作数(一个或两个)需作为形参加以说明。,运算符重载规则,不能定义新的运算符,如:“、“*“。,以下运算符不能重载:“:“、“.“、“? :“和sizeof。,优先级、操作数个数和结合方向不变。,专门处理对象。在运算符定义的参数表中,至少有一个参数必须是类对象。,“=“、“ “、“( )“、“-“和类
2、型转换运算符只能作为成员函数重载。,调用运算符函数,用非成员函数重载运算符时,操作数作函数形参。若重载了二元运算符 “+“ ,则 a + b 和 operator + (a,b) 等价;若重载了一元运算符 “-“ ,则 -a 和 operator - (a) 等价。,用成员函数重载运算符时,第一操作数是参数表中隐含的this指针所指向的对象,所以并不显式地出现在参数表中。若重载了二元运算符 “+“,则 a + b 和 a.operator + (b) 等价;若重载了一元运算符 “-“,则 -a 和 a.operator - () 等价。,class A int x; public:A(int
3、n = 0) : x(n) A operator +(A t)A a;a.x = x + t.x;return a; ;,重载加法运算符“+“,class A int x; public:A(int n = 0) : x(n) friend A operator +(A a1, A a2)A a;a.x = a1.x + a2.x;return a; ;,重载加法运算符“+“,class A int x; public:A(int n = 0) : x(n) A operator -()return A(-x); ;,重载取负运算符“-“,class A int x; public:A(int
4、 n = 0) : x(n) friend A operator -(A a)return A(-a.x); ;,重载取负运算符“-“,class A int x; public:A(int n = 0) : x(n) A operator +()x+;return *this; ;,重载前缀自增运算符“+“,class A int x; public:A(int n = 0) : x(n) friend A operator +(A ,重载前缀自增运算符“+“,class A int x; public:A(int n = 0) : x(n) A operator +(int)x+;retu
5、rn A(x-1); ;,重载后缀自增运算符“+“,class A int x; public:A(int n = 0) : x(n) friend A operator +(A ,重载后缀自增运算符“+“,重载类型转换符“long“,class A int x; public:A(int n = 0) : x(n) operator long()return (long)x; ;,重载类型转换符“long“,重载赋值运算符“=“,重载赋值运算符,系统为每个类都生成了一个缺省的赋值运算符。默认的赋值操作就是同类对象间对应成员的逐一赋值(浅层复制)。,如果类中包含指向动态空间的指针,一般需要重载赋值运算符和复制构造函数,以实现深层复制。,返回值应声明为引用,而函数体总是用语句return *this;返回。,重载C+流运算符“,class A int x; public:A(int n = 0) : x(n) friend ostream,重载C+流运算符“,