我试图为 <<-operator-overloading 写一个简单的例子。 以前,我从来没有用过“ friend ”这个关键词。但没有它就无法工作。我做错了什么或者为什么我需要这里的 friend 关键字?
class rational{
public:
rational(double num, double count)
: n(num),c(count){}
rational& operator+=(const rational& b){
this->n+= b.n;
this->c+= b.c;
return *this;
}
friend std::ostream& operator<<(std::ostream& os, const rational& obj)
{
std::cout << obj.n << "," << obj.c << std::endl;
return os;
}
private:
double n;
double c;
};
谢谢
最佳答案
你没有犯任何错误。 friend
关键字给你 operator<<()
实现访问 private
(和 protected
,如果有的话)类(class)成员。
注意因为是 friend ,operator<<()
这里隐式地是一个自由函数而不是成员函数(如果它是一个成员函数,它已经可以访问 private
东西了!)。因为它只在类内部声明和定义,所以只能通过依赖于参数的查找找到它,但这对 operator<<
没问题。并且是您还不必担心的细节。
关于c++ - 运算符重载的 friend 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638670/