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

c++——友元函数

一、友元函数的定义

友元函数是一种特殊的函数,虽然不是类的成员函数,却能够访问类的私有和保护成员。

即:友元函数是可以访问类的私有成员和保护成员的外部函数。

二、友元函数的声明

友元函数的声明要放在类定义的内部,使用friend关键字进行声明。

三、友元函数的分类

1.外部函数友元

2.成员函数友元

class Int;
class object
{
public:void Print(const Int& it);
};
class Int
{friend void object::Print(const Int& it); //成员函数友元
private:int value;
public:Int(int x = 0) :value(x){cout << "Create Int: " << this<<endl;}~Int(){cout << "Destory Int:" << this << endl;}};
void object::Print(const Int& it)
{cout << it.value << endl;
}int main()
{Int a(10);object obj;obj.Print(a);return 0;
}

3.类友元

整个类可以是另一个类的友元。友元类的每个成员函数都是另一个类的友元函数,都可以访问另一个类中的所有成员(公有、保护、私有等)。

class Int; //先声明Int,因为object类中需要使用Int
class object
{
public:void Print(const Int& it);
};
class Int
{friend class object;  //类友元
private:int value;
public:Int(int x = 0) :value(x){cout << "Create Int:" << this << endl;}~Int(){cout << "Destory Int:" << this << endl;}
};
void object::Print(const Int& it)
{cout << it.value << endl;
}
int main()
{Int a(10);object obj;obj.Print(a);return 0;
}

四、友元的特点

1.友元不具有对称性(单向的)

A是B的友元,但B不是A的友元。

2.友元不具有传递性

A是B的友元,B是C的友元,但A不是C的友元。

3.友元不具有继承性

五、注意点

①友元会破坏类的封装特性。

友元函数不属于类的成员,没有this指针,不能直接调用类的成员函数,必须要通过对象访问成员。

③友元函数的声明不受类中访问权限的控制,可以放在类的公有、保护、私有部分,结果一致。

④友元函数一般用于运算符重载、两个类之间。

http://www.xdnf.cn/news/1150003.html

相关文章:

  • Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>
  • Android无需授权直接访问Android/data目录漏洞
  • K8s与Helm实战:从入门到精通
  • MySQL数据丢失救援办法
  • 物联网iot、mqtt协议与华为云平台的综合实践(万字0基础保姆级教程)
  • 抖音回应:没有自建外卖,就是在团购的基础上增加的配送功能
  • 游戏开发日志
  • Android回调机制入门
  • Ambiguity-Resolved Waveform Design for Cell-free OFDM-Based ISAC Systems
  • QuecPython-正则表达式
  • 研华PCI-1285/1285E 系列------(一概述)
  • LVS(Linux virtual server)-实现四层负载均衡
  • Spring Boot 与微服务详细总结
  • 软件测试理论02—测试流程体系
  • 云端成本治理利器:亚马逊云科技智能仪表盘(AWS Cost Intelligence Dashboard)深度解析
  • 练习三:熟知前端知识
  • Django3 - Web前端开发基础 HTML、CSS和JavaScript
  • web.m3u8流媒体视频处理
  • 服装公司生产管理系统,如何实战提升生产效率?
  • 张量交换维度(转置),其实是交换了元素的排列顺序
  • 如何实现电脑自动关机与定时任务管理
  • ABP VNext + Temporal:分布式工作流与 Saga
  • react+antd 可拖拽模态框组件
  • 尚庭公寓-----day2 业务功能实现
  • 物联网系统中的可视化大屏定义
  • 华为仓颉编程语言语法简介与示例
  • React 的 `cache()` 函数
  • 医疗AI与融合数据库的整合:挑战、架构与未来展望(下)
  • Java行为型模式---状态模式
  • 6-大语言模型—预训练:数据处理