重载运算符总结

重载运算符

一重载运算符的限制

在我们定义了类之后,出现了一些新的数据类型,因此我们要根据数据类型的不同要重新编写我们的运算符,在c++中大部分的预定义的运算符都可以被重载,但以下运算符不能被重载 "." ".*" "::" "?" "sizeof"。

重载运算符函数可以对运算符做出新的解释,即定义用户所需要的各种操作。但运算符重载后,原有的基本语句不变,包括

1 不改变运算符的优先级

2 不改变运算符的结合性

3 不改变运算符所需要的操作数

要注意的是不能创新的运算符,只有系统预定义的运算符才能被重载。

二重载运算符的语法形式

运算符函数是一种特殊的成员函数或友元函数。成员函数的语句格式为:

类型 类名::operator op(参数表)

{

//相对于该类定义的操作

}

类型是函数的返回类型。“类名”是要重载该运算符的类。“op”表示要重载的运算符“参数表”列出该运算符所需要的操作数

重载运算符的函数不能有默认参数. 
重载的运算符必须和用户定义的自定义类型一起使用,其参数至少应有一个是类对象(或类对象的引用) 
防止用户修改用于标准数据类型的运算符
用于类对象的运算符一般必须重载,但有两个例外“=”和“&”不必重载 
"=”,系统有默认的重载函数,就是逐个复制成员,除非有必要(像动态分配内存的内容)就不必重载 
"&",它能返回类对象在内存中的起始地址 
要按习惯重载,虽然可以但还是不要把“+”重载成 减法,否则有违重载的初衷 

运算符重载函数可以是类成员函数(如“+”左边必须是类),类友元函数(需要访问类私有成员时使用很方便),普通函数(访问类私有成员时不太方便) 

重载运算符有两种方式

一种是成员函数重载运算符,另一种是友元函数重载运算符。

重载为类的成员函数

返回类型(类名::)operator运算符(形参表){函数体;}

重载为类的友元函数

friend 函数类型 operator 运算符(形参表){函数体;}

通过友元关系可以实现不同类或对象的成员函数之间,类的成员函数与一般函数之间进行数据共享机制。我们先在类中声明这几个重载函数为该类的友元,这里要注意此时重载函数的参数有两个而不是一个,友元函数需要两个参数分别调用在主函数往里面传递的值,友元函数最大的好处就是能够调用类中的私有数据成员,还能保证类的封装性。所以我认为一般用友元函数重载运算符要比用成员函数重载要好用。

  1. #include <iostream>  
  2. using namespace std;  
  3. class Coordinate  
  4. {  
  5. public:  
  6.     Coordinate(int x, int y)  
  7.     {  
  8.         m_iX = x;  
  9.         m_iY = y;  
  10.     }  
  11.     Coordinate &operator--()  
  12.     {  
  13.         this->m_iX--;  
  14.         this->m_iY--;  
  15.         return *this;  
  16.     }  
  17.     Coordinate operator--(int)  
  18.     {  
  19.         Coordinate coor(*this);  
  20.         coor.m_iX=this->m_iX--;  
  21.         coor.m_iY=this->m_iY--;  
  22.         return coor;  
  23.     }  
  24.     Coordinate operator+(Coordinate &c)  
  25.     {  
  26.         Coordinate temp(0,0);  
  27.         temp.m_iX=this->m_iX+c.m_iX;  
  28.         temp.m_iY=this->m_iY+c.m_iY;  
  29.         return temp;  
  30.     }  
  31. public:  
  32.     int m_iX;  
  33.     int m_iY;  
  34. };  
  35.   
  36. int main(void)  
  37. {  
  38.     Coordinate coor1(1, 3);  
  39.     Coordinate coor2(2, 4);  
  40.     Coordinate coor3(0, 0);  
  41.   
  42.     coor1--;  
  43.     --coor2;  
  44.     coor3 = coor1 + coor2;  
  45.   
  46.     cout << coor3.m_iX << endl;  
  47.     cout << coor3.m_iY << endl;  
  48.   
  49.     return 0;  
  50. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值