使用友元运算符分配和私有变量是不可访问的
Using a Friend Operator Assignment and private variable is inaccessible
我正在尝试让"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);
}
相关文章:
- 从不同C++类的成员变量访问成员函数
- 在主函数中C++私有变量访问
- 互锁变量访问(在布尔值上)和 std::atomic_flag 之间的区别
- C++中的变量访问内联函数
- 无法使用子类变量访问超类公共成员
- 优化成员变量访问
- Ifstream:打开可使用变量访问的文件
- 使用'this->'成员变量访问的性能
- 从成员变量访问静态 constexpr 成员,GCC 错误?
- TLS变量访问的结果未缓存
- 通过const成员变量访问内联函数
- 获取通过环境变量访问的文件的位置
- 静态变量访问
- 从函数变量访问结构变量的成员
- 从另一个变量访问变量
- 使用变量访问结构中的任何数据
- 如何使用另一个变量访问对象的变量/方法
- 使用用户变量访问结构的成员?C++
- 我需要通过基类静态变量访问派生类成员
- 如何将一个文件中存在的全局常量变量访问到另一个文件