使用友元运算符分配和私有变量是不可访问的

Using a Friend Operator Assignment and private variable is inaccessible

本文关键字:变量 访问 友元 运算符 分配      更新时间:2023-10-16

我正在尝试让"sum+=A"在我的代码中工作我正在学习编写运算符,但主要处理左侧的对象,因此由于sum是双重类型,我不确定如何对我的运算符进行编码,将sum的值与bank对象中的余额变量相加,并在运算符中返回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;
}

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

您有几个问题。

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

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

所以你最终应该使用

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

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