2015-11-04 52 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); 
}