当前位置: 首页 > wzjs >正文

浏览器看外国网站百度关键词排名点

浏览器看外国网站,百度关键词排名点,书签制作步骤,绵阳网站设计制作友元函数和友元类是C中的特性,允许外部函数或类访问某个类的私有(private)和保护(protected)成员。它们通过破坏封装性来提供灵活性,通常用于特定场景。 1. 友元函数 友元函数是一个非成员函数&#xff0…

友元函数和友元类是C++中的特性,允许外部函数或类访问某个类的私有(private)和保护(protected)成员。它们通过破坏封装性来提供灵活性,通常用于特定场景。

1. 友元函数

友元函数是一个非成员函数,但可以访问类的私有和保护成员。它在类中声明,并使用 friend 关键字。

示例:
class MyClass {
private:int secret;public:MyClass(int s) : secret(s) {}// 声明友元函数friend void displaySecret(MyClass obj);
};// 定义友元函数
void displaySecret(MyClass obj) {// 可以直接访问私有成员std::cout << "Secret is: " << obj.secret << std::endl;
}int main() {MyClass obj(42);displaySecret(obj);  // 输出: Secret is: 42return 0;
}

2. 友元类

友元类是一个类,其所有成员函数都可以访问另一个类的私有和保护成员。它在类中声明,并使用 friend 关键字。

示例:
class MyClass {
private:int secret;public:MyClass(int s) : secret(s) {}// 声明友元类friend class FriendClass;
};class FriendClass {
public:void displaySecret(MyClass obj) {// 可以直接访问私有成员std::cout << "Secret is: " << obj.secret << std::endl;}
};int main() {MyClass obj(42);FriendClass fc;fc.displaySecret(obj);  // 输出: Secret is: 42return 0;
}

关键点

  1. 访问权限:友元函数或类可以访问类的私有和保护成员。

  2. 单向性:友元关系是单向的,若 A 是 B 的友元,B 不自动成为 A 的友元。

  3. 不传递:友元关系不传递,若 A 是 B 的友元,B 是 C 的友元,A 不自动成为 C 的友元。

  4. 破坏封装:友元破坏了封装性,应谨慎使用。

适用场景

  • 需要外部函数或类访问私有成员时。

  • 运算符重载时,如 << 或 >>,通常需要声明为友元函数。

在C++中,重载 << 运算符(用于输出流)通常需要将其声明为友元函数,原因如下:


1. 运算符重载的两种形式

C++ 中运算符重载可以通过两种方式实现:

  • 成员函数:运算符作为类的成员函数。

  • 非成员函数:运算符作为全局函数或友元函数。

对于 << 运算符,通常需要将其重载为非成员函数,原因如下。


2. << 运算符的特殊性

<< 是用于输出流的运算符,通常与 std::ostream 对象(如 std::cout)一起使用。它的调用形式通常是:

std::cout << object;

其中:

  • std::cout 是 std::ostream 类型的对象。

  • object 是用户自定义类的对象。

如果 << 重载为类的成员函数,调用形式会变为:

object << std::cout;

这与常规用法不符,也不符合直觉。


3. 为什么需要友元函数?

为了将 << 重载为非成员函数,同时又能访问类的私有成员,需要将其声明为友元函数。原因如下:

  • 访问私有成员<< 运算符通常需要访问类的私有数据成员以输出其内容。

  • 非成员函数<< 需要作为非成员函数重载,以保持 std::cout << object 的调用形式。

通过声明为友元函数,<< 可以在类外部访问私有成员,同时保持非成员函数的形式。


4. 示例代码

以下是一个典型的 << 运算符重载示例:

#include <iostream>
using namespace std;class MyClass {
private:int value;public:MyClass(int v) : value(v) {}// 声明友元函数friend ostream& operator<<(ostream& os, const MyClass& obj);
};// 定义友元函数
ostream& operator<<(ostream& os, const MyClass& obj) {os << "MyClass value: " << obj.value;  // 访问私有成员 valuereturn os;
}int main() {MyClass obj(42);cout << obj << endl;  // 输出: MyClass value: 42return 0;
}

5. 关键点总结

  • 非成员函数<< 需要作为非成员函数重载,以保持 std::cout << object 的调用形式。

  • 访问私有成员:通过声明为友元函数,<< 可以访问类的私有成员。

  • 灵活性:友元函数提供了灵活性,同时保持了封装性(仅在必要时破坏封装)。


6. 如果不使用友元函数?

如果不使用友元函数,可以通过提供公有成员函数来获取私有数据,然后在 << 重载中使用这些函数。例如:

class MyClass {
private:int value;public:MyClass(int v) : value(v) {}int getValue() const {  // 提供公有成员函数return value;}
};ostream& operator<<(ostream& os, const MyClass& obj) {os << "MyClass value: " << obj.getValue();  // 通过公有函数访问私有成员return os;
}

这种方法避免了使用友元函数,但需要额外编写公有接口,可能会增加代码复杂性。


总结

重载 << 运算符通常需要声明为友元函数,因为它需要作为非成员函数重载以保持调用形式的直观性,同时需要访问类的私有成员。友元函数提供了实现这一需求的简洁方式。

友元函数和友元类提供了访问私有和保护成员的途径,但应谨慎使用以避免破坏封装性。


文章转载自:

http://XnGkbGdL.yrngx.cn
http://6GVoYzoK.yrngx.cn
http://4gdDjxIV.yrngx.cn
http://Hn1U5URh.yrngx.cn
http://9yHKtpiI.yrngx.cn
http://jThsDSHk.yrngx.cn
http://uEBDNTKc.yrngx.cn
http://nmyjRGkr.yrngx.cn
http://hgEClOkQ.yrngx.cn
http://fr8u722o.yrngx.cn
http://6KXIZYuY.yrngx.cn
http://mLS46BPo.yrngx.cn
http://OeYvywWG.yrngx.cn
http://i2EME6M4.yrngx.cn
http://op771Apz.yrngx.cn
http://NUs90rrS.yrngx.cn
http://DkuwsOWi.yrngx.cn
http://fgveuhQ7.yrngx.cn
http://4dTtFZP9.yrngx.cn
http://2vkulwsf.yrngx.cn
http://q58ff28F.yrngx.cn
http://VMfZ8x0H.yrngx.cn
http://wG5Yzx7A.yrngx.cn
http://IprWc8q3.yrngx.cn
http://UfxptPUh.yrngx.cn
http://FtK5dEiy.yrngx.cn
http://9XfuVD52.yrngx.cn
http://9IlteklQ.yrngx.cn
http://8ef6eHRC.yrngx.cn
http://bN95oynY.yrngx.cn
http://www.dtcms.com/wzjs/668403.html

相关文章:

  • 网站广告psd哪个网站做的系统好用
  • 网站建设php文件html文件在线网站建设
  • 旅游小镇网站建设方案建筑公司logo设计
  • 什么网站发布找做效果图的网站建设企业属于什么类型的公司
  • 主机屋vps网站助手做电影网站程序哪个好
  • 动易网站cms中企动力公司网站价格
  • wordpress二维码用户登录福州百度seo代理
  • 上海备案证查询网站查询网站wordpress怎么分享到微信支付
  • 网站一定要服务器吗新建设网站如何推广
  • 女生学电子商务后悔了百度seo指南
  • 大型企业网站建设制作360元网站建设
  • 网络建站东北WordPress当前菜单高亮
  • 如何网站全部结构php mysql做网站
  • 网站建设知乎动漫设计课程
  • 做网站需要写配置文件吗做板材外贸一般用哪个网站
  • 低成本做网站 白之家网站设计计划
  • 网站翻书效果成都网站空间创新互联
  • 建设网站的子文件夹淘宝客网站怎么做
  • 电影网站源码access电销外呼系统多少钱一个月
  • 学建站论坛青海省建设厅网站执业
  • 购物网站设计的意义租赁服务器
  • 做网站怎么接业务网站标题前的小图标怎么做
  • 仿网站源码个人网页设计作品展示
  • 网站域名代备案网站换模板要怎么做
  • 做竞品分析去哪个网站公司网站做的好的公司
  • 建设银行江苏省分行网站提供手机网站制作哪家好
  • 哈尔滨服务好的建站保险网官网
  • 论坛网站建设公司全屋定制品牌
  • 设置网站维护页面好的专业网站建设公司
  • 衡水网站建设联系电话千锋教育课程