C++类中的友元类(Friend Class)有什么权限?(访问另一个类的私有成员)
发布时间 - 2026-01-09 00:00:00 点击率:次友元类能访问被声明为friend的类的所有非静态成员(含private和protected),但不能直接访问静态私有成员;友元关系不可继承、不传递;使用时需通过对象实例访问,避免语法或作用域错误。
友元类能访问哪些成员?
友元类可以访问被声明为 friend 的类的 所有非静态成员,包括 private 和 protected 成员,但不能直接访问静态私有成员(需通过作用域解析或对象调用,权限本身是允许的)。这种访问权仅限于该友元类的成员函数内部,不传递、不继承、不自动授予其派生类。
友元关系是否可继承或传递?
不可以。友元关系既不继承,也不传递:
-
class A声明class B为友元 →B可访问A的私有成员 -
class C : public B→C仍 不能 访问A的私有成员 -
B中的友元函数或类,不会自动让A对它们开放权限
常见误用:在友元类中访问私有成员时出错
典型错误不是权限缺失,而是语法或作用域问题:
- 忘记通过对象实例访问(如写
A::private_member而非a_obj.private_member) - 试图在友元类的
static成员函数中直接访问非静态私有成员(必须通过具体对象) - 在模板类中声明友元时未正确处理模板参数(如漏写
template或未用friend class B);
class A {
int x = 42;
friend class B; // 正确:B 是 A 的友元
};
class B {
public:
void f(A& a) {
a.x = 100; // ✅ 合法:通过 A 的对象访问私有成员
}
static void g(A& a) {
a.x = 200; // ✅ 同样合法:静态函数仍可通过对象访问
}
};
友元类 vs. 公共接口:什么时候该用?
友元类适合极少数强耦合场景,比如:
- 容器类与其迭代器类(如
std::vector和它的iterator) - 配套的工厂/管理类需要深度操作目标类内部状态(如内存池管理器与缓冲区类)
- 单元测试类(部分框架中显式声明为友元以验证私有逻辑)
但要注意:它破坏封装性,一旦滥用会显著提高维护成本。比起友元,优先考虑 public / protected 接口、getter/setter 或 const 成员函数暴露必要能力。
# c++
# 作用域
# 封装性
# Static
# 封装
# 成员函数
# const
# 继承
# 接口
# class
# public
# private
# protected
# 对象
# 类中
# 的是
# 也不
# 什么时候
# 不可以
# 管理器
# 其中一个
# 能做
# 而非
# 悄无声息
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Android使用GridView实现日历的简单功能
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
如何快速搭建高效服务器建站系统?
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
魔毅自助建站系统:模板定制与SEO优化一键生成指南
原生JS实现图片轮播切换效果
js实现点击每个li节点,都弹出其文本值及修改
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Laravel如何集成Inertia.js与Vue/React?(安装配置)
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel如何使用Collections进行数据处理?(实用方法示例)
创业网站制作流程,创业网站可靠吗?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
如何在腾讯云免费申请建站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何在阿里云部署织梦网站?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
中国移动官方网站首页入口 中国移动官网网页登录
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
iOS验证手机号的正则表达式
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何基于云服务器快速搭建网站及云盘系统?
中山网站制作网页,中山新生登记系统登记流程?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
微信小程序 require机制详解及实例代码
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何用狗爹虚拟主机快速搭建网站?
bootstrap日历插件datetimepicker使用方法
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Python面向对象测试方法_mock解析【教程】
Laravel模型事件有哪些_Laravel Model Event生命周期详解


nd的类的所有非静态成员(含private和protected),但不能直接访问静态私有成员;友元关系不可继承、不传递;使用时需通过对象实例访问,避免语法或作用域错误。