2015-11-04 51 views
0

我試圖讓我的代碼中的「sum + = A」工作我正在學習編寫操作符,但主要是處理左側的對象,因爲總數是一種雙重類型,我不確定如何編碼我的操作員在銀行對象中添加餘額變量的值並返回操作員中的總和。使用朋友運算符賦值和私有變量不可訪問

在我主我

double sum = 0; 
Bank A("Tom", 500.50); 
Bank B("Sam", 123.45); 
sum += A; 
sum += B; 
cout << sum << endl; 

在我的頭和實現文件我有

class Bank{ 
    char name[31]; 
    double balance; 
    public: 
    friend double operator+=(double, const Bank&); 
}; 

double operator+=(double a, Bank& rhs) { 
    a += rhs.balance; 
return a; 
} 

我一直在使用它沒有朋友試過,但我不能確定正確的語法對於具有使用賦值運算符時的雙值。任何幫助將被認可。

+0

你有什麼問題呢?如果您遇到構建錯誤,請將其包含在內(完整版和未經編輯)。如果您得到意想不到的結果,請顯示輸入,實際產出和預期產出。請編輯您的問題以包含該信息。 –

回答

0

你有幾個問題。

首先 - 您的friend聲明和您的方法定義不匹配(您錯過了const)。這意味着方法定義不是朋友。

其次 - +=運營商需要將其第一個參數作爲參考,因此它可以更新它。它也應該返回一個參考。

所以,你應該用

... 
    friend double & operator+=(double &, const Bank&); 
}; 

double & operator+=(double &a, const Bank& rhs) { 
    a += rhs.balance; 
    return a; 
} 
+0

如果你不介意的話,我的代碼可以在沒有double和operator的情況下工作嗎?你可以解釋一下在程序中增加了什麼嗎? – Jimmy

+0

只有當你使用了返回值,如'sum2 = sum + = A',或者可能'cout <<(sum + = A)',甚至'(sum + = A)++' 。請注意,這些都不太可讀,所以我不會推薦它。它需要是一個參考,以便最後一個示例可以更新該值,而不是更新副本。 –

0

結束了在你執行operator+=,要更改的變量的本地副本。它不會更改調用函數中的變量。您需要使用:

double& operator+=(double& a, const Bank& rhs) { 
    a += rhs.balance; 
    return a; 
} 

此外,您還需要在Bank提供一個構造函數能夠構建類的實例,是這樣的:

Bank(char const* n, double b) : balance(b) 
{ 
    std::strcpy(name, n); 
} 
相關問題