使用非成员函数重载运算符

时间:2011-04-23 05:35:06

标签: c++ operator-overloading non-member-functions

这个问题的答案似乎让我感到厌烦,但你如何使用非成员函数进行重载。您是否只是创建了一个程序级函数,并且在原型(或定义)存在的地方,运算符是否为该类类型重载?

1 个答案:

答案 0 :(得分: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");

但更具可读性。

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