重载运算符

我们为什么要重载运算符呢?
理由就是,我们C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。
运算符重载有两种方式:重载为类的成员函数&重载为类的友元函数

1成员函数重载运算符

成员函数重载运算符的原型在类的内部
格式如下:

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

在类外定义成员运算符函数的格式为:
返回类型 类名::operator 运算符(形参表){
 //函数体 
} 

运算符可以分为单目运算符和双目运算符。
1.1单目运算符
用成员函数重载运算符时,如果运算符是单目的,则参数表为空。因为这时操作数访问该重载运算符的对象本身的数据,该对象有this指针指向,所以参数表为空。

struct ti{
int a,b;
 bool operator < (ti &y){
  if(a !=y.a )return a <y.a ;
  return b >y.b ;
 }
``

重载双目运算符时,左边操作数是访问该重载运算符的对象本身的数据,有this指针指向,右边操作数通过成员运算符函数的参数指出。所以,此时成员运算符函数只有一个参数。

 ti operator +(ti &x){
  ti ans;
  ans.a =a+x.a ;
  ans.b =b+x.b ;
  return ans;
 }

1.3重载++,–运算符
现在C++能识别“++”,“–”运算符是前缀还是后缀的,他们是单目运算符。
类名 operator++()//前缀方式
类名 operator++(int)//后缀方式。“–”同理

ti operator++(){
	++a;
	++b;
	return *this;
}
ti operator ++(int){
	ti temp=*this;
	++a;
	++b;
	return temp;
}

2友元函数重载运算符

用友元函数重载运算符时,因为友元运算符函数没有this指针,所以如果运算符时单目的,则参数表中有一个操作数,如果运算符时双目的,则参数表中有两个操作数。
格式如下:

friend <函数类型> operator <运算符> (<形参>)
{...} 
friend <函数类型> operator <运算符> (<形参1>,<形参2>)
{...} 

在重载输出输入运算符的时候,只能采用全局函数的方式(因为我们不能在ostream和istream类中编写成员函数),这里才是友元函数真正的应用场景

 friend istream &operator>>(istream &in,ti &x){
  in>>x.a>>x.b;
  return in;
 }
 friend ostream &operator <<(ostream &out,ti &x){
  out<<x.a<<" "<<x.b;
  return out;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值