C++的問題 關於 operator 的編譯問題

請問 為什麼可以直接這樣改寫成x+y呢??

現在 operator 僅幾診視朋友函數

不是應該寫成 operator +(x,y); 這樣子嗎??

實在是搞不太懂 operator 判斷的點??

就像 operator [](int a) 可以是 a[2] 這樣的輸入

書上完全沒提到位什麼可以這樣寫=口=?

這是原本的定義嗎??

還是 編譯的時候 自動會轉變呢?

有規則可循嗎??

class aa{

public:

int a;

friend aa operator +(aa x,aa y)

}

aa operator +(aa x,aa y)

{

return (aa.x+aa.y)/2

}

void main()

{

aa x;

aa y;

x+y;

}

2 Answers

Rating
  • 其威
    Lv 7
    9 years ago
    Favorite Answer

    因為 operator overloading 就是這樣用的。

    例如你有個 class aa; 與兩個變數 aa x, y;。

    當編譯器看到 x + y 的時候,不知道要怎麼辦,於是就跳出編譯失敗。

    為了要讓這樣的程式碼可以通過編譯,你必須有一個方法告訴編譯器「遇到 operator +、兩邊又都是 class aa 型態的變數的時候」要怎麼辦。

    C++ 就提供了你可以「複寫」各種 operator 的方式,來讓你告訴編譯器該怎麼辦。

    例如你寫的

    aa operator + (aa x, aa y)

    {

    ...

    }

    表示在看到 "lhs + rhs" 這種形式,而 lhs 與 rhs 又都是 aa(或是可以轉換為 aa)的時候,會做函式主體內的事情,並回傳一個 aa。

    你的書上沒寫要 overload 各種 operator,需要何種形式,是你的書太爛。

    應該考慮換一本,或直接看這頁:http://en.wikipedia.org/wiki/Operators_in_C_and_C%...

    === 分隔線 ===

    另外,你的程式碼有些錯誤:

    1. class 定義最後請加上分號。

    class aa {

    ...

    }; // <== 你漏了分號

    2. aa operator + (aa x, aa y) 不需要用到 class aa 中 private 區段的東西,所以不必成為 friend。

    而且那行也漏了分號 = =

    3. return (aa.x + aa.y) / 2; 是什麼東西...?? = =

    應該是 return (x.a + y.a) / 2;

    而且這行又漏了分號... = =

    4. main() 應該回傳 int。

    請改成 int main()。

  • Anonymous
    6 years ago

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

    【 最新活動→迎接新會員,首存狂送20% 】

    【運動→電子→對戰→現場→彩球 】

    【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

Still have questions? Get your answers by asking now.