c++ - 成员与非成员运算符重载

标签 c++ operator-overloading

我试图理解 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/

相关文章:

c++ - 在 C++ 中重载 >> 运算符有问题吗?

c++ - 了解 bool 运算符==(参数1,参数2)

c++ - 开发基于扇区的分区复制程序?

c++ - 从派生类访问基类对象

c++ - 参数化运算符重载

c++ - 如何重载 I/O 运算符 C++

c++ - C++ 中的运算符重载 <<

c++ - 将 vector 从一类转换为另一类 vector

c++ - 为什么在 C++ 中某些函数/变量前面有字符 "_"?

c++ - 重载 operator new/分配超过对象大小