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

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

这个问题的答案似乎让我难以理解,但是您如何着手使用非成员函数进行重载。您是否只是创建一个程序级函数,并且在原型(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/

相关文章:

c#串口奇数值?

c++ - 与 clang++ 和 scons 链接的正确方法

c++ - 将 Boost 参数与 operator() 一起使用

c++ - 重载 operator<< 和 operator+ 导致错误

c++ - C++ 中的切片和运算符重载

c++ - Effective C++ Item 23 Prefer non-member non-friend functions to member functions

c++ - 删除指针是什么意思?

c++ - 如何将 double 格式格式化为十六进制?

c++ - 继承类上的运算符 new 和 delete。运营商删除不执行

c++ - 在 C++ 中重载乘法运算符