2014-02-08 52 views
-1

在此代碼中,爲什麼要將&放在const CVector & param中?操作員超載程序中的混淆

,我們可以用它作爲跟隨

c = a + b; 
c = a.operator+ (b); 

在第二份聲明,bCVector&類型,所以這就是爲什麼我很困惑。

// overloading operators example 

#include <iostream> 
using namespace std; 

class CVector { 
    public: 
    int x,y; 
    CVector() {}; 
    CVector (int a,int b) : x(a), y(b) {} 
    CVector operator + (const CVector&); 
}; 

CVector CVector::operator+ (const CVector& param) { 
    CVector temp; 
    temp.x = x + param.x; 
    temp.y = y + param.y; 
    return temp; 
} 

int main() { 
    CVector foo (3,1); 
    CVector bar (1,2); 
    CVector result; 
    result = foo + bar; 
    cout << result.x << ',' << result.y << '\n'; 
    return 0; 
} 
+0

請閱讀[運營商重載FAQ條目](http://stackoverflow.com/q/4421706/819272)。 – TemplateRex

回答

2

因爲你不希望你的操作數由操作進行修改呢,你有兩種解決方案:

  1. 發送的對象的副本讓原本停留不變
  2. 將其作爲const引用:關鍵字const阻止您修改對象,並且引用允許您傳遞對象而不需要副本。
0

您可以使用引用來避免複製object和const來指示對象不會被修改。

1

因爲你沒有在第二個向量上操作(修改它的屬性),你只是從中讀取它。通過使用&符號,確保它通過引用傳遞,如果第二個向量是大數據結構(例如1000 * 1000矩陣),則該引用可以高效地工作。

+0

效率是一個好點。謝謝 – Jianchen