今天在快要下班的時候,突然有個要求說,關於設備信息的排序要使用通道號大小來排序,對於之前一直都是使用標題來默認排序的,那麼就需要將這個通道的信息進行一個比較才能排序了,於是想到了要重載運算符> < =;由於時間比較緊,所以就隨便寫了一個運算符重載的函數,沒想到搞了幾分鐘沒編譯過,嚇的不輕,趕緊掛機回家算了,回到家中想想,其實方法是沒錯的,只是當時有些急着下班,所以就出錯了,這個就當回顧一下吧!
#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:水平有限,供參考使用。請大家批評指正,互相學習進步