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

4 回答 4

1

好吧,这意味着它存在一个运算符 <<(肯定在全局命名空间或当前类的命名空间中),将 ostream & 作为第一个参数,将 const CSnmpMaintenanceSwitch & 作为第二个参数,并且该运算符可以访问您的私有成员当前类(当然是 CSnmpMaintenanceSwitch)

于 2013-06-24T06:45:56.963 回答
0

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

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

或者

std::cout << CSnmpMaintenanceSwitchInstance;

运算符被声明为friend可以访问CSnmpMaintenanceSwitch.

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

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

于 2013-06-24T06:47:32.640 回答
0

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

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

于 2013-06-24T06:54:56.910 回答
0

字面上地?这是一个独立<<操作符的声明,它ostream在左边和CSnmpMaintenanceSwitch右边有一个。该表达式产生一个ostream引用。

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

于 2013-06-24T06:47:06.867 回答