这个问题的答案似乎让我难以理解,但是您如何着手使用非成员函数进行重载。您是否只是创建一个程序级函数,并且在原型(prototype)(或定义)存在的任何地方都为该类类型重载运算符?
最佳答案
有了成员函数,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
(这就是为什么成员运算符少了一个参数)。
关于c++ - 使用非成员函数重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5762420/