C++ 运算符重载

运算符重载的机制是不能改变原有运算符的逻辑。
前置++(++i)的处理逻辑是本身先相加,再返回本身。
比如
int a=10;
++a=20;
编译正确,a的值为20.
后置++(i++)的处理逻辑是本身先生成一个临时量,先使用临时量(常量),表达式结束,本身再++。
int a=10;
a++=20;
编译错误,报错:error C2106: “=”: 左操作数必须为左值

#include<iostream>
class CInt
{
public:
   CInt(int val)
     :mvalue(val)
   {
   }
   bool operator<(int rhs)
   {
       return mvalue<rhs;
   }
   CInt& operator++()//前置++
   {
        ++mvalue;
        return *this;
   }
   const CInt operator++(int)//后置++
   {
        CInt tmp(*this);
        mvalue++;
        return tmp;
   }
   int& operator[](int* parr)
   {
        return parr[mvalue];
   }
private:
   int mvalue;
};
int main()
{
    int arr[]={1,2,65,22,78};
    int len=sizeof(arr)/sizeof(arr[0]);

    CInt c(20);
    std::cout<<(c<10)<<std::endl;//0

    for(CInt i=0;i<len;i++)
    {
        std::cout<<i[arr]<<" ";
    }
    std::cout<<std::endl;
    return 0;
}

不仅能重载运算符,也能重载类型,但是不建议使用类型的重载。比如上面遍历数组时,若按照arr[i]的形式来访问,则类中的函数改为如下,也是可以成功遍历的:

operator int()
{
     return mvalue;
} 

此时程序对arr[i]的处理相当于arr[i.operator int () ],所以可以成功调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值