使用好友操作员分配和私人变量无法访问

时间:2015-11-04 03:10:34

标签: c++

我试图获得"总和+ = A"在我的代码中工作我正在学习编写运算符,但主要处理左侧的对象,因此总和是双重类型我不确定如何编写运算符以将sum的值与平衡变量相加银行对象并返回运算符中的总和。

我的主要是

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;
}

我在没有朋友的情况下尝试过使用它,但我不确定在使用赋值运算符时使用double值的正确语法。任何帮助都会得到帮助。

2 个答案:

答案 0 :(得分:0)

你有几个问题。

首先 - 您的friend声明和您的方法定义不匹配(您错过了const)。这意味着方法定义不是朋友。

第二 - +=运算符需要将其第一个参数作为引用,以便它可以更新它。它还应该返回一个参考。

所以你最终应该

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

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

答案 1 :(得分: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);
}