加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 结构的比较运算符重载,对称地将我的结构与int类型进行比较

发布时间:2020-12-16 09:44:15 所属栏目:百科 来源:网络整理
导读:我试图重载这些运算符: , =,==, =,,也许以后!=, 在结构中. 似乎将结构的对象与同一结构的另一个对象进行比较很容易,因为当为该场景重载运算符时,该定义是自动对称的. 但是,如果我想将我的struct FOOD与int进行比较呢? 只要FOOD首先出现,这也很容易,但是,
我试图重载这些运算符:
<,< =,==,> =,>,也许以后!=,
在结构中.

似乎将结构的对象与同一结构的另一个对象进行比较很容易,因为当为该场景重载运算符时,该定义是自动对称的.

但是,如果我想将我的struct FOOD与int进行比较呢?
只要FOOD首先出现,这也很容易,但是,当int出现时,情况怎么样?如果没有g给我这么多“必须包含一个参数”错误,我如何定义?

我意识到了

bool operator> (const int &,const FOOD &) const;

由于“不止一个论点”的事情而存在问题.我明白了.

在我遍布各个论坛的所有论坛上,每个人的解决方案似乎都在使用朋友,但他们的困难总是在课程的背景下,而不是结构.如何为s结构做?

struct FOOD {
    int foodID;
    double price;
    bool operator> (const FOOD  &) const;       //FOOD >  FOOD
    bool operator>=(const FOOD  &) const;       //FOOD >= FOOD
    bool operator==(const FOOD  &) const;       //FOOD == FOOD
    bool operator<=(const FOOD  &) const;       //FOOD <= FOOD
    bool operator< (const FOOD  &) const;       //FOOD <  FOOD
    bool operator> (const int   &) const;       //FOOD >  int 
    bool operator>=(const int   &) const;       //FOOD >= int
    bool operator==(const int   &) const;       //FOOD == int
    bool operator<=(const int   &) const;       //FOOD <= int
    bool operator< (const int   &) const;       //FOOD <  int
    bool operator> (const int &,const FOOD &) const;   // int >  FOOD
    bool operator>=(const int &,const FOOD &) const;   // int >= FOOD
    bool operator==(const int &,const FOOD &) const;   // int == FOOD
    bool operator<=(const int &,const FOOD &) const;   // int <= FOOD
    bool operator< (const int &,const FOOD &) const;   // int <  FOOD
};

bool FOOD::operator> (const FOOD  &f) const {return foodID >  f.foodID;}//FOOD >  FOOD
bool FOOD::operator>=(const FOOD  &f) const {return foodID >= f.foodID;}//FOOD >= FOOD
bool FOOD::operator==(const FOOD  &f) const {return foodID == f.foodID;}//FOOD == FOOD
bool FOOD::operator<=(const FOOD  &f) const {return foodID <= f.foodID;}//FOOD <= FOOD
bool FOOD::operator< (const FOOD  &f) const {return foodID <  f.foodID;}//FOOD <  FOOD
bool FOOD::operator> (const int   &i) const {return foodID >  i;}   //FOOD >  int 
bool FOOD::operator>=(const int   &i) const {return foodID >= i;}   //FOOD >= int
bool FOOD::operator==(const int   &i) const {return foodID == i;}   //FOOD == int
bool FOOD::operator<=(const int   &i) const {return foodID <= i;}   //FOOD <= int
bool FOOD::operator< (const int   &i) const {return foodID <  i;}   //FOOD <  int
bool FOOD::operator> (const int &i,const FOOD &f) const {return i >  f.foodID;}// int >  FOOD
bool FOOD::operator>=(const int &i,const FOOD &f) const {return i >= f.foodID;}// int >= FOOD
bool FOOD::operator==(const int &i,const FOOD &f) const {return i == f.foodID;}// int == FOOD
bool FOOD::operator<=(const int &i,const FOOD &f) const {return i <= f.foodID;}// int <= FOOD
bool FOOD::operator< (const int &i,const FOOD &f) const {return i <  f.foodID;}// int <  FOOD

g给了我这些错误:

structsTransAndFood.cc:64:45: error: ‘bool FOOD::operator>(const int&,const FOOD&) const’ must take exactly one argument

解决方法

在FOOD结构之外定义它:

bool operator> (const int &i,const FOOD &f) {return i >  f.foodID;}

不要忘记从FOOD结构中删除这个错误的声明:

bool operator> (const int &,const FOOD &) const; // <--- remove it

和相应的定义:

bool FOOD::operator> (const int &i,const FOOD &f) const {return i >  f.foodID;} // <--- remove it

对其他运算符重复相同的操作.

你声称你理解“不止一个论点”.然而,事实证明你没有.我不明白为什么你有麻烦理解这里的编译器和2个人告诉你什么,但这里是解决方案的样子:

struct FOOD {
    int foodID;
    double price;

    bool operator> (const FOOD  &) const;
    bool operator>=(const FOOD  &) const;
    bool operator==(const FOOD  &) const;
    bool operator<=(const FOOD  &) const;
    bool operator< (const FOOD  &) const;

    bool operator> (const int   &) const;
    bool operator>=(const int   &) const;
    bool operator==(const int   &) const;
    bool operator<=(const int   &) const;
    bool operator< (const int   &) const;
};

bool FOOD::operator> (const FOOD  &f) const {return foodID >  f.foodID;}
bool FOOD::operator>=(const FOOD  &f) const {return foodID >= f.foodID;}
bool FOOD::operator==(const FOOD  &f) const {return foodID == f.foodID;}
bool FOOD::operator<=(const FOOD  &f) const {return foodID <= f.foodID;}
bool FOOD::operator< (const FOOD  &f) const {return foodID <  f.foodID;}

bool FOOD::operator> (const int   &i) const {return foodID >  i;}
bool FOOD::operator>=(const int   &i) const {return foodID >= i;}
bool FOOD::operator==(const int   &i) const {return foodID == i;}
bool FOOD::operator<=(const int   &i) const {return foodID <= i;}
bool FOOD::operator< (const int   &i) const {return foodID <  i;}

bool operator> (const int &i,const FOOD &f) {return i >  f.foodID;}
bool operator>=(const int &i,const FOOD &f) {return i >= f.foodID;}
bool operator==(const int &i,const FOOD &f) {return i == f.foodID;}
bool operator<=(const int &i,const FOOD &f) {return i <= f.foodID;}
bool operator< (const int &i,const FOOD &f) {return i <  f.foodID;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读