關於C++ 的operator overloading

想請教各位大大

我想重新定義==的operator overloading,可是電腦一直告訴我說"operator ==的參數太多" ,我實在不知道錯在哪,不給他兩個參數要怎麼比較啊?

以下是我的程式碼,麻煩幫我debug一下看是哪裡出了問題,感激不盡~

#include "stdafx.h"

#include <iostream>

using namespace std;

class F

{

public:

F( ) { };

bool operator ==(const F& R1,const F& R2);

int a,b ;

};

int main( )

{

F R1,R2;

cin>>R1.a>>R2.a;

if(R1==R2)

cout<<"True";

else

cout<<"False";

system("pause");

return 0;

}

bool operator ==(const F& R1,const F& R2)

{

return (R1.a==R2.a);

}

Update:

小琪大大可以再講清楚一點嗎?

我還不懂,而且我把參數改成1個後,電腦又跟我說參數太少...

Update 2:

我改過後程式是可以跑了,不過結果卻是錯的...他跑出來永遠是True.不會跑出False,怎麼會這樣哩?

Update 3:

謝謝小琪大大,我成功了。不過我想請教一下,operator的宣告放在class裡面以及放在class外面的差別在哪?

我後來把operator放在class外面,給他兩個參數compiler就過了耶,可是為什麼operator放在class裡面就只能給一個參數哩?

可以說明一下兩者的差異嗎?謝謝您喔~

2 Answers

Rating
  • ?
    Lv 5
    10 years ago
    Best Answer

    只需要一個參數!

    另一個是 this!

    如你最後寫的那個:

    bool operator ==(const F& R)

    { return a==R.a; }

    就可以了

    2010-06-18 20:44:10 補充:

    當然,你宣告的地方也要改。

    2010-06-19 04:20:43 補充:

    #include

    using namespace std;

    class F

    { public:

    bool operator ==(const F &R) { return a == R.a; }

    public:

    int a, b;

    };

    int main(void)

    { F R1, R2;

    cin >> R1.a >> R2.a;

    cout << ((R1==R2) ? "True\n" : "False\n");

    system("pause");

    return 0;

    }

    2010-06-19 04:21:38 補充:

    上面那 include 和你的一樣,沒改。

    Operator overload 通常建議寫在 class 宣告裡面。

    2010-06-19 08:11:50 補充:

    R1 == R2 前後那一對 ( ) 可以不用

    2010-06-20 17:36:49 補充:

    我當時有試、剛才又試,true 和 false 都會依我的輸入正確顯示耶!

    你是用我 2010-06-19 04:20:43 補充的程式?

    2010-06-21 05:21:24 補充:

    我當時有試、剛才又試,true 和 false 都會依我的輸入正確顯示耶!

    你是用我 2010-06-19 04:20:43 補充的程式?

    如果不是,你要重 post 你的新程式才有辦法!

    想信這裡回答的人,沒有一位是未卜先知。

    2010-06-21 16:58:36 補充:

    在裡面,它是個 member function。

    所以,c == d 的 c 是隱藏的參數(this)。

    因此,可以直接用它的 member data(看我寫的 return a == R.a)

    宣告在外面,它不是 member function!只是一般的 function。

    所以,沒有隱藏的參數!

    因此,你要兩個參數都給它!

    2010-06-21 19:18:03 補充:

    感謝 Novus 大師的補充。 ^_^

  • novus
    Lv 6
    10 years ago

    operator放裡面和外面的考量有兩方面

    1.對成員的存取權限

    2.模組化、美感....

    有一派的觀點是

    只有必要直接存取成員的operator該放到class內,其他的operator都應該放到class之外

Still have questions? Get your answers by asking now.