请解释一下这个朋友声明是什么意思
Please explain what does this friend declaration mean?
friend ostream &operator<<(ostream &os, const CSnmpMaintenanceSwitch &sw);
好吧,这意味着它存在一个运算符<lt;(当然是在全局命名空间或当前类的命名空间中)使用ostream&作为第一参数和常量CSnmpMaintenanceSwitch&作为第二个参数,此操作符可以访问当前类的私有成员(当然是CSnmpMaintenanceSwitch)
将其取消警报为friend
的原因是您可能希望直接访问并使用重载运算符中的一些私有变量。
因为您将对象CSnmpMaintenanceSwitch
作为constant reference
,所以保证它不会修改私有数据
这一行声明了一个operator<<
,它接受两个参数:对实例std::ostream
的引用和对CSnmpMaintenanceSwitch
实例的常量引用。它将允许您编写一些关于CSnmpMaintenanceSwitch
实例的信息,以输出类似的流
operator<< ( std::cout , CSnmpMaintenanceSwitchInstance );
或
std::cout << CSnmpMaintenanceSwitchInstance;
运算符被声明为friend
,因此它可以访问CSnmpMaintenanceSwitch
的私有和受保护成员。
第一个参数被声明为非常量引用,因为输出流应该根据oeprator<<
的默认特性进行修改(一些数据将被写入其中)。
第二个参数被声明为常量引用,因为operator<<
不应该更改它(根据它的默认性质)。
从字面上看?它是一个独立的<<
运算符的声明,该运算符的左边有一个ostream
,右边有一个CSnmpMaintenanceSwitch
。该表达式生成ostream
引用。
语义上?它是一个流插入运算符。你知道怎么说std::cout << someString;
吗?这是因为在某个地方,有一个声明说ostream& operator<<(ostream& os, const string &str);
。您询问的行几乎可以肯定是在CSnmpMaintenanceSwitch
类中找到的,它为该操作符提供了输出其中一个对象所需的访问权限。现在你也可以说std::cout << mySnmpMaintenanceSwitch;
了。
- 与朋友声明相反
- 为什么即使我声明了朋友类,我也会收到错误"无法访问类中声明的私人成员"
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 朋友声明的复杂范围界定规则有什么意义?
- 警告定义朋友操作员在名称空间内声明
- 朋友功能声明中的错误C
- 类与朋友而不是前向声明,:哪个编译器是正确的
- Forward宣布了Singleton班级,并带有Freshial声明的朋友功能
- 在模板类中编写朋友函数声明的正确方法是什么?
- 朋友功能声明为会员函数
- 如何在两个类之外的模板类内部的非模板类中声明的朋友函数定义
- 声明一个简单模板类的variadic模板类的朋友
- 可以在C 11中有条件声明的朋友类
- 可以在C 03中有条件地声明朋友类吗?
- 我们如何在 c++ 中以朋友声明"friend elaborated-class-name ;"为例?
- 显式专用化不能是朋友声明
- 非常不平凡的模板朋友声明
- 需要帮助理解与朋友声明有关的段落
- 朋友声明:这是clang中的bug吗
- 请解释一下这个朋友声明是什么意思