一、运算符重载:自定义类型和内置类型满足的相同的逻辑。分为两种:
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... 文章内容不能为空发布成功 文章摘要由系统生成写新文章管理博文查看文章