代码之家  ›  专栏  ›  技术社区  ›  josh

流运算符重载

  •  6
  • josh  · 技术社区  · 14 年前

    为什么流操作符的重载(lt;<,>)应该作为朋友而不是作为类的成员保留?

    3 回复  |  直到 10 年前
        1
  •  9
  •   CB Bailey    14 年前

    当您将二进制运算符重载为类的成员函数时,当 第一 操作数属于类类型。

    对于流运算符,第一个操作数是流,而不是(通常)自定义类。

    因此,为以常规方式使用的自定义类重载流运算符不能是自定义类的成员函数,它们必须是自由函数。

    (我假设流类是不可更改的;如果是,您可以向流类添加成员函数以处理其他自定义类型,但从依赖关系的角度来看,这通常是不可取的。)

    他们是否是朋友应该取决于他们是否需要访问非公开的班级成员。

        2
  •  2
  •   Khaled Alshaya    14 年前

    所以你可以说:

    some_stream << my_class;
    

    注意,成员运算符的定义使左侧的类成为自己的类。例如。:

    my_class << some_stream;
    

    这不是标准流应该如何工作的。

        3
  •  0
  •   UncleBens    14 年前

    什么班的成员?左侧操作数的类型是什么?

    他们不必是 friend 但是,除非需要访问不可访问的私有数据。