我试图理解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 ?
};
应该显示
non-member
重载的用法。但是我不明白在类内部声明它是非成员的吗?还是它取决于参数的数量,因为+
是二进制操作,因此对于2个参数,它被视为非成员,而对于1个成员,它被视为非成员? 最佳答案
friend
声明被注入到类定义所在的名称空间中。也就是说,声明(在以后的说明中添加了名称空间):
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/