zoukankan      html  css  js  c++  java
  • 运算符重载为友元函数

    1、为什么需要把需要把运算符重载为友元函数?
    运算符重载,如果重载为类的成员函数能解决问题的话最好。但是有些情况下,将运算符重载为成员函数并不能有效的解决问题,这个时候考虑将运算符重载为全局函数。但是将运算符重载为全局函数也有一些不足。遇到这种情况的一种策略就是把运算符重载为友元函数。

    Complex x,y;
    y=x+5//情况一
    y=5+x;//情况二
    
    • 情况一
      这种情况将加号运算符重载为Complex类的成员函数没有问题。x+5等价于x.operator+(5)。
    • 情况二
      这种情况如果将加号运算符重载为Complex类的成员函数不会发起符号函数的调用,但是如果将加号重载为全局函数,全局函数内部又无法访问到x对象的数据。此时考虑将该全局函数生命为Complex类的友元函数。

    2、什么情况下需要将运算符重载为友元函数?

    • 情况一
      对双目运算符进行的重载,运算符左侧运算对象不能够发起运算符重载函数的调用(左侧运算对象的类型与右侧不匹配,但是定义运算符函数属于右侧类类型的成员函数 ,因此无法发起函数调用。),此时应该重新写一个全局的运算符重载函数,并在该类中将此方法声明为友元函数。
    • 其它情况
      (遇到后再做记录。)
  • 相关阅读:
    第九篇 正则表达式
    第八篇、递归、装饰器
    第四篇、函数和递归
    第二篇、HTML
    nginx rewrite标签配置以及用户认证配置
    nginx location
    nginx日志配置,以及日志轮询
    nginx别名配置,状态配置,include优化
    第一篇 先用socket模拟web服务器
    第二十八篇、自定义线程池
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764274.html
Copyright © 2011-2022 走看看