【问题标题】:Please explain what does this friend declaration mean? [duplicate]请解释一下这个朋友声明是什么意思? [复制]
【发布时间】:2013-06-24 06:43:27
【问题描述】:
friend ostream &operator<<(ostream &os, const CSnmpMaintenanceSwitch &sw);

【问题讨论】:

  • 它为CSnmpMaintenanceSwitch类重载了operator &lt;&lt;。
  • 这个声明中有什么神秘或不清楚的地方?

标签: c++ operator-overloading friend


【解决方案1】:

嗯,这意味着它存在一个运算符

【讨论】:

    【解决方案2】:

    将其声明为friend 的原因是您可能希望在重载的运算符中直接访问和使用一些私有变量。

    因为你给对象CSnmpMaintenanceSwitch作为constant reference,所以保证它不会修改私有数据

    【讨论】:

      【解决方案3】:

      这一行声明了一个operator&lt;&lt;,它接受两个参数:一个对std::ostream实例的引用和一个对CSnmpMaintenanceSwitch实例的常量引用。它将允许您将有关CSnmpMaintenanceSwitch 实例的一些信息写入输出流,如

      operator<< ( std::cout , CSnmpMaintenanceSwitchInstance );
      

      或

      std::cout << CSnmpMaintenanceSwitchInstance;
      

      运算符被声明为friend,因此它可以访问CSnmpMaintenanceSwitch 的私有成员和受保护成员。

      第一个参数被声明为非常量引用,因为输出流应该被修改(一些数据将被写入)oeprator&lt;&lt;的默认性质。

      第二个参数被声明为常量引用,因为operator&lt;&lt; 不应更改它(默认情况下)。

      【讨论】:

        【解决方案4】:

        真的吗?这是一个独立的&lt;&lt; 运算符的声明,它的左侧有一个ostream,右侧有一个CSnmpMaintenanceSwitch。该表达式产生一个ostream 引用。

        语义上?它是一个流插入运算符。你知道怎么说std::cout &lt;&lt; someString;吗?嗯,那是因为在某个地方,有一个声明说ostream&amp; operator&lt;&lt;(ostream&amp; os, const string &amp;str);。您所询问的行几乎可以肯定在 CSnmpMaintenanceSwitch 类中找到,并为该操作员提供了输出其中一个对象所需的访问权限。所以现在你也可以说std::cout &lt;&lt; mySnmpMaintenanceSwitch;了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-03
          • 2014-09-20
          • 2022-12-05
          • 1970-01-01
          • 2012-05-09
          • 1970-01-01
          相关资源
          最近更新 更多