Length a(4, 2), b(1, 8), c (0);
c = a + b;
Length a(4, 2), b(1, 8), c(0);
c = operator+(a, b);
c = 2 + a;
相當於以下語句:c = operator+(2, b);
這兩個語句都能正確編譯和執行,因為 Length 類的轉換建構函式能夠在整數形參 2 之外建立一個 Length 物件。class Length { private: int len_inches; public: //修改operator+的宣告 Length operator+(Length b); //類的其餘部分,省略 };請注意,該運算子現在被宣告為釆用 Length 型別的單個運算子,這是因為作為一個成員函數,該運算子被自動通過隱式形參 this 傳遞一個 Length 物件。例如,如果編寫以下語句:
Length a(4, 2), b(1, 8), c(0);
c = a + b;
Length a(4, 2), b(1, 8), c (0);
c = a.operator+ (b);
Length Length::operator+(Length b) { return Length(this->len_inches + b.len_inches); }綜上所述,加法運算子(以及其他算術運算子和關係運算子)既可以作為成員函數,也可以作為獨立函數過載。
Length a(4, 2), c(0);
c = a + 2; //編譯,當於 c = a.operator+ (2)
c = 2 + a; //不能編譯:相當於 c = 2 .operator+ (a);