运算符重载(18.11.17)

一、运算符重载:自定义类型和内置类型满足的相同的逻辑。分为两种:
1.普通运算符重载:
1>. <运算符重载,代码如下:
bool operator<(int rhs) //int rhs形参作为右操作数
{
return mdata<rhs; //mdata类成员变量
}
2>.前置++的运算符重载 ,代码如下:
Clnt& operator++() //返回类型为&,不生成对象
{
++mdata;
return this;
}
3>. 后置++的运算符重载,代码如下:
const Clnt operator++(int) // 返回常对象,因为后置++不可修改
{
const Clnt tmp(mdata);
mdata++; return tmp;
}
注意事项:
前置++与后置++的区别:
a.前置++之后可被操作,给本身+;后置++不可被修改,给副本+。例如:
int i=10;
++i=20; //操作正确,分析:i=10 -> i=11 -> i=20
i++=20; //报错:i++不可作为左操作数
b.前置++运算符重载,返回类型对象的引用;后置++运算符重载,返回类型为常对象,因为后置++不可再被修改。 4>.[]的运算符重载,代码如下:
int& operator[](int
parr) // int* parr参数作为右操作数
{
return parr[mdata];
}
注意事项:
在主函数中,arr[i]:arr为数组,i为下标(也是类对象),如调用[]运算符重载函数,则会出现:参数不匹配,原因为 i 为类对象,当[]运算符重载函数写入类内时,左操作数为this指向的类对象,右操作数为传入的参数;但arr[i]调用时,传 入的参数为左操作数,类对象为右操作数,无法成功调用,要想成功调用,则在调用点将arr[i]换成i[arr]。
2、类型重载,代码如下:
operator int() //int类型重载
{
return mdata;
}
代码示例:
#include
class Clnt{
public:
Clnt(int data=0):mdata(data){} //构造函数

/*bool operator<(int rhs) //<的运算符重载
{
return mdata<rhs;
}
*/
Clnt& operator++() //前置++的运算符重载
{
++mdata;
return this;
}
/

const Clnt operator++(int) //后置++的运算符重载
{
const Clnt tmp(mdata);
mdata++;
return tmp;
}

 int& operator[](int* parr)         //[]的运算符重载 

{
return parr[mdata];
}
*/
operator int() //int类型重载
{
return mdata;
}
int getData()
{
return mdata;
}
private:
int mdata;
};

int main()
{
int arr[]={123,21,3,4,1};
int len=sizeof(arr)/sizeof(arr[0]);
for(Clnt i=0;i<len;++i) //i.operator<(len) => i<len i.operator++() => ++i
{
std::cout<<i[arr]<<" "; //i[arr] => arr[i] i.operator
}
return 0;
}

2.类型重载:

  Markdown       0 字数     2 行数     当前行 2, 当前列 0      HTML       0 字数     0 段落           Menu     Main workspace not synced.Sign in with GoogleSync your main workspace and unlock functionalities.WorkspacesSwitch to another workspace.SynchronizeSync your files in the Cloud.PublishExport your files to the web.HistoryTrack and restore file revisions.File propertiesAdd metadata and configure extensions.    Table of contents       Markdown cheat sheet       Import from disk       Export to disk       Print       More...   文章内容不能为空发布成功     文章摘要由系统生成写新文章管理博文查看文章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值