我试图理解 C++ 中的运算符重载,我遇到了这段代码:
class Imaginary {
double re,im ;
public:
Imaginary ( double r, double i=0 ) : re(r), im(i) {}
Imaginary operator - ( void ) const; // member
Imaginary operator + ( const Imaginary& x ) const; // member
friend Imaginary operator + ( double a, const Imaginary& b ); // non-member ?
};
应该显示非成员
重载的使用。但是我不明白它在类内部声明时如何成为非成员?或者它取决于参数的数量,因为 +
是二元运算,所以有 2 个参数它被认为是非成员而有 1 个成员?
最佳答案
friend
声明被注入(inject)到它出现的类定义周围的命名空间中。即声明(命名空间添加到后面的说明):
namespace foo {
class Imaginary {
// ...
friend Imaginary operator+ (double a, Imaginary const& b);
};
}
实际上做了两件事:它声明了一个函数,并声明允许该函数访问类 Imaginary
的所有成员。声明的函数是
foo::Imaginary foo::operator+ (double a, foo::Imaginary const& b);
关于c++ - 成员与非成员运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600288/