c++笔记--运算符重载

重载操作符:

1、结合性以及优先性不变

2、操作个数不变

3、操作数类型规定:参数和返回类型可以重新说明,既可以重载,重载形式为:

返回类型 operator 运算符(参数说明)

c++规定,运算符中参数说明都是内部类型,不能重载,如

int * operator +(int ,int *)//error
//既不允许
//int a=5;
//int *pa=&a;
//pa=a*pa;

4、不能重载的运算符

点操作符(.)     域操作符(::)      成员间访操作符(.*)     成员指针操作符(->*)      条件操作符(?:)


值返回与引用返回


c++规定:=赋值运算符、()函数调用运算符、[]下标运算符、->通过指针访问类成员的运算符必须为成员函数形式

重载增量运算符:在定义上,放上一个整数形参,就是后增量预算符(a++)

前增量运算符返回引用,后增量运算符返回值

#include<iostream>
using namespace std;
//---------------------
class Increase{
public:
  Increase(int x):value(x){}
  Increase& operator++();      //前增量
  Increase operator++(int);     //后增量
  void display(){ cout<<"the value is "<<value<<endl; }
private:
  int value;
};//-------------------
Increase & Increase::operator++(){
  value++;                      //先增量
  return *this;                 //再返回原对象
}//--------------------
Increase Increase::operator++(int){
  Increase temp(*this);         //临时对象存放原有对象值
  value++;                      //原有对象增量修改
  return temp;                  //返回原有对象值
}//--------------------
int main(){
  Increase n(20);
  n.display();
  (n++).display();              //显示临时对象值
  n.display();                  //显示原有对象
  ++n;
  n.display();
  ++(++n);
  n.display();
  (n++)++;                      //第二次增量操作对临时对象进行
  n.display();
}//--------------------
the value is 20
the value is 20
the value is 21
the value is 22
the value is 24
the value is 25

那么最重要的问题来了,我们什么时候声明为成员函数,什么时候声明为非成员函数呢?

首先,我们要明白这句话:对于成员函数来说,一个操作数通过this指针隐式的传递,(即本身),另一个操作数作为函数的参数显示的传递;对于友元函数(非成员函数)两个操作数都是通过参数来传递的。

(1)一般来说,单目运算符重载为类的成员函数,双目运算符重载为类的友元函数(咳咳,一般情况下)

(2)双目运算符不能将 = ()【】 -> 重载为类的友元函数。

(3)如果运算符的第一次操作数要求为隐式转换则必须为友元函数。

(4)当最左边的要求为类对象,而右边的是一个内置类型,则要为友元函数。
   


最重要的注意点:

T1 = T2 + T3;

可以为T1 = T2.operator+(T3);

也可以为T1  = operator+(T2,T3);

但是这两种方式不能同时声明定义,因为这会出现二义性。造成程序不知道该执行那个函数。在进行运算符重载的时候千万要注意造成二义性的情况。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值