请解释一下这位朋友的声明是什么意思?

时间:2013-06-24 06:43:28

标签: c++ operator-overloading friend

friend ostream &operator<<(ostream &os, const CSnmpMaintenanceSwitch &sw);

4 个答案:

答案 0 :(得分:1)

嗯,这意味着它存在一个运算符&lt;&lt; (当然在全局命名空间或当前类的命名空间中)采用ostream和amp;作为第一个参数和一个const CSnmpMaintenanceSwitch&amp;作为第二个参数,此运算符可以访问当前类的私有成员(当然是CSnmpMaintenanceSwitch)

答案 1 :(得分:0)

字面上?它是一个独立<<运算符的声明,其左侧为ostream,右侧为CSnmpMaintenanceSwitch。该表达式产生ostream引用。

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

答案 2 :(得分:0)

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

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

std::cout << CSnmpMaintenanceSwitchInstance;

运营商声明为friend,因此可以访问CSnmpMaintenanceSwitch的私人和受保护成员。

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

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

答案 3 :(得分:0)

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

因为您将对象CSnmpMaintenanceSwitch设为constant reference,所以可以保证它不会修改私有数据