c++運算符重載

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

#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:水平有限,供參考使用。請大家批評指正,互相學習進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章