您的位置:首页 > 编程语言 > C语言/C++

c++运算符重载

2015-03-18 23:47 176 查看
今天在快要下班的时候,突然有个要求说,关于设备信息的排序要使用通道号大小来排序,对于之前一直都是使用标题来默认排序的,那么就需要将这个通道的信息进行一个比较才能排序了,于是想到了要重载运算符> < =;由于时间比较紧,所以就随便写了一个运算符重载的函数,没想到搞了几分钟没编译过,吓的不轻,赶紧挂机回家算了,回到家中想想,其实方法是没错的,只是当时有些急着下班,所以就出错了,这个就当回顾一下吧!

#include
#include

typedef struct channel_info
{
int name;
int ip;
int title;
int devName;
void operator=(const channel_info& info)
{
this->name = info.name;
this->ip = info.ip;
this->title = info.title;
this->devName = info.devName;
}
bool operator>(const channel_info& info)
{
return (this->name > info.name &&
this->ip > info.ip &&
this->title > info.title &&
this->devName > info.devName);
}
bool operator<(const channel_info& info)
{
return (this->name < info.name &&
this->ip < info.ip &&
this->title < info.title &&
this->devName < info.devName);
}
bool operator==(const channel_info& info)
{
return (this->name == info.name &&
this->ip == info.ip &&
this->title == info.title &&
this->devName == info.devName);
}
}CHANNEL_INFO;
int main(int argc, char* argv[])
{
CHANNEL_INFO info;
info.name = 1;
info.ip = 2;
info.title = 3;
info.devName = 4;
CHANNEL_INFO infoTmp;
infoTmp = info;
std::cout<<"operator =  !!!!!!!!!start"<<std::endl;
std::cout<<"name="<<infoTmp.name<<
std::endl<<"ip="<<infoTmp.ip<<std::endl<<"title="<<infoTmp.title<<
std::endl<<"devName="<<infoTmp.devName<<std::endl;
std::cout<<"operator =  end"<<std::endl;
CHANNEL_INFO info2;
info2.name = 2;
info2.ip = 3;
info2.title = 4;
info2.devName = 5;
vector vct;
vct.push_back(info);
vct.push_back(infoTmp);
vct.push_back(info2);
std::cout<<"operator >  start"<<std::endl;
if(info2 > infoTmp)
std::cout<<"info2 > infoTMP"<<std::endl;
else
std::cout<<"info2 < infoTMP"<<std::endl;
std::cout<<"operator > end"<<std::endl;
std::cout<<"operator < start"<<std::endl;
if(info2 < infoTmp)
std::cout<<"infoTMP > info2"<<std::endl;
else
{
std::cout<<"infoTMP < info2, swap value!"<<std::endl;
//infoTmp = info2;
vct.at(1) = vct.at(2);
}
std::cout<<"operator < end"<<std::endl;
std::cout<<"operator =  @@@@@@@@start"<<std::endl;
std::cout<<"name="<<vct.at(1).name<<
std::endl<<"ip="<<vct.at(1).ip<<std::endl<<"title="<<vct.at(1).title<<
std::endl<<"devName="<<vct.at(1).devName<<std::endl;
std::cout<<"operator =  end"<<std::endl;
return 0;
}


ps:水平有限,供参考使用。请大家批评指正,互相学习进步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: