簡體   English   中英

重載運算符

[英]Overloaded Operators

我有一類叫做“學生”的變量,其中一個變量是包含學生姓名的字符串。

我想重載“>”運算符,以便它進行測試以查看第一個學生的姓名是否長於第二個學生的姓名,並且我希望它返回布爾值(正確或錯誤)。

bool operator>(Students student1, Students student2)
{ //code to compare the two strings}

我不斷收到一條錯誤消息,提示我參數太多。

您確實有太多參數。

重載操作時,第一個隱式參數是當前對象,也稱為this

所以你要:

class Students
{
    /*Param #1 is THIS*/ 
    bool operator>(Students& student2)
    {
        return (this->name.Length > student2.name.Length);
    }
}

用法將類似於:

void MyFunc()
{
    Students alpha("Eric");
    Students beta("Sampson");

    if (alpha > beta) // effectively calls alpha.OperatorGreater(alpha, beta)

}

將比較運算符聲明為非成員或成員函數。 請參閱以下示例,這兩個示例都很好。

非成員函數版本:

using namespace std;

struct s {
  double a;
  s(double aa): a(aa) {};
};

bool operator< (const s &s1, const s &s2) {
  return s1.a < s2.a;
}

int main() {
  s s1(1);
  s s2(2);

  bool b = s1 < s2;
}

成員函數版本:

using namespace std;

struct s {
  double a;
  s(double aa): a(aa) {};

  bool operator< (const s &s2) { return a < s2.a ;}
};


int main() {
  s s1(1);
  s s2(2);

  bool b = s1 < s2;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM