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

C++ 友元

友元(friend)机制允许某些函数或类访问另一个类的私有(private)和保护(protected)成员。友元不是类的成员,但可以像成员一样访问类的私有数据。友元分为三种常见形式:全局函数做友元、友元类、成员函数做友元。

1. 全局函数做友元

• 在类内用friend声明某个全局函数为友元,该函数可以访问类的私有和保护成员。

示例:

class Box {
private:int length;
public:Box(int l) : length(l) {}friend void printLength(const Box& b); // 声明全局函数为友元
};void printLength(const Box& b) {std::cout << b.length << std::endl; // 可以访问私有成员
}

2. 友元类

• 在类内用friend class 类名;声明另一个类为友元类,该类的所有成员函数都可以访问本类的私有和保护成员。

示例:

class Engine; // 前向声明class Car {
private:int speed;
public:Car(int s) : speed(s) {}friend class Engine; // Engine是Car的友元类
};class Engine {
public:void showSpeed(const Car& c) {std::cout << c.speed << std::endl; // 可以访问Car的私有成员}
};

3. 成员函数做友元

• 可以只将另一个类的某个成员函数声明为友元,而不是整个类。

示例:

class Car; // 前向声明class Engine {
public:void showSpeed(const Car& c);
};class Car {
private:int speed;
public:Car(int s) : speed(s) {}friend void Engine::showSpeed(const Car& c); // 只授权Engine的showSpeed为友元
};void Engine::showSpeed(const Car& c) {std::cout << c.speed << std::endl; // 可以访问Car的私有成员
}

总结

• 友元机制打破了类的封装性,应谨慎使用,只在确有需要时开放接口。
• 友元关系是单向的、不可传递的。
• 友元可以是全局函数、类、或成员函数,灵活控制访问权限。

相关文章:

  • 【沉浸式解决问题】baseMapper can not be null
  • 【世纪龙科技】智能网联汽车自动驾驶虚拟实训软件
  • JS红宝书笔记 8.2 创建对象
  • Mybatis之Integer类型字段为0,入库为null
  • Spring-创建第一个SpringBoot项目
  • html实现登录与注册功能案例(不写死且只使用js)
  • Ubuntu编译ffmpeg解决错误:ERROR: avisynth/avisynth_c.h not found
  • Kafka性能压测报告撰写
  • Vue3中使用 Vue Flow 流程图方法
  • 103. 2017年蓝桥杯省赛 - 日期问题(困难)- 暴力枚举
  • (哈希)128. 最长连续序列
  • 华为ModelArts详解
  • 使用 mysql2/promise 模块返回以后,使用 await 返回数据总结
  • 时序数据库概念及IoTDB特性详解
  • C++位图
  • FPGA基础 -- Verilog 命名事件
  • Debian配置Redis主从、哨兵
  • Rsync+sersync实现数据实时同步(小白的“升级打怪”成长之路)
  • C++实现异步(重叠)管道通信
  • GameFormer论文阅读
  • 做我女朋友的网站/seo服务建议
  • 厦门建网站多少钱/河南最近的热搜事件
  • 加网络网站建设工作室/广西关键词优化公司
  • wordpress站点进入时弹窗/上海百度推广
  • 做碳循环的网站/外贸推广有哪些好的方式
  • 个人政务公开网站建设工作总结/百度搜不干净的东西