1

这个问题的答案似乎让我无法理解,但是您如何使用非成员函数进行重载。您是否只是创建一个程序级函数,并且无论原型(或定义)存在于何处,该类类型的运算符都被重载了吗?

4

1 回答 1

3

使用成员函数,this将是左侧参数,这意味着您的运算符将只有一个参数(或者对于一元运算符没有参数)。对于独立函数,您必须分别为二元或一元运算符提供两个或一个参数。

一个很好的例子是<< 流的操作符:

class T;

// ...

std::ostream & operator<<(std::ostream &os, const T &val)
{
    // ...
    return os;
}

这里,os是左侧参数,val是右侧参数。

至于“where”,操作符必须定义在你使用的地方。通常,将它们放在与要为其重载运算符的类型相同的位置。

编辑:

对于非平凡的运算符(基本类型的算术运算),运算符是函数调用的语法糖。当你这样做时:

std::cout << "Hello";

就像这样写:

operator<<(std::cout, "Hello");

但更具可读性。

对于成员运算符,左参数将是this(这就是成员运算符少一个参数的原因)。

于 2011-04-23T05:40:55.037 回答