尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C++友元

C++友元
📅 发布时间:2026/6/23 11:00:43

友元基础概念

定义:friend 是 C++ 特有机制,允许外部函数 / 外部类,直接访问本类的 private、protected 私有 / 保护成员
核心弊端:破坏面向对象封装性,打破类的访问权限隔离,工程开发中少用
语言对比:Java、C# 没有友元机制,依靠接口、get/set 函数替代友元功能
设计初衷:C++ 兼容 C 语言面向过程写法的妥协,方便兼容老式 C 代码、简化运算符重载等场景

友元函数

  1. 使用规则
    在类内部用friend声明外部函数,声明不受 public/private/protected 位置限制;
    友元函数不属于当前类,没有 this 指针
  2. 代码示例
#include<iostream>usingnamespacestd;classPerson{private:// 私有成员,外部普通函数无法直接访问intmoney=1000;public:// 声明全局函数visit为友元friendvoidvisit(Person p);};// 友元函数实现voidvisit(Person p){// 直接访问Person私有成员moneycout<<"私有存款:"<<p.money<<endl;}intmain(){Person p;visit(p);return0;}

友元类

  1. 核心特性
    语法:类内声明 friend class 类名;
    单向性:友元关系不能传递、不能双向自动生效
    ● 若 A 声明 B 为友元 → B 能访问 A 私有;但 A 不能访问 B 私有,需要 B 内部额外声明 A
    整个友元类的所有成员函数,都可以访问当前类的私有 / 保护成员。
  2. 代码示例(单向友元)
#include<iostream>usingnamespacestd;// 前置声明classGirl;classBoy{public:voidlook(Girl g);};classGirl{private:intsecret=99;// 声明Boy为友元类,Boy全部函数可访问Girl私有friendclassBoy;};voidBoy::look(Girl g){// 合法:Boy是Girl友元,读取私有secretcout<<"女孩私有数据:"<<g.secret<<endl;}intmain(){Boy b;Girl g;b.look(g);return0;}

补充:
上例中 Girl 是 Boy 的普通类,Boy 没有被 Girl 设为友元,Girl 的函数不能访问 Boy 私有成员

友元关键限制

友元关系单向,不会自动互成朋友
友元关系不可继承:父类的友元,不会自动成为子类的友元
友元不可传递:A 友元 B、B 友元 C,不代表 A 友元 C
友元只是访问通道,友元函数不属于本类,不能用 对象.友元函数() 调用

优缺点总结

优点
简化运算符重载、跨类数据交互代码
兼容 C 旧代码,减少复杂封装接口的编写
缺点
严重破坏封装,私有成员对外暴露,不符合面向对象设计规范
权限管理混乱,难以管控谁能修改内部私有数据
Java/C# 等现代面向对象语言直接舍弃该特性

开发规范建议

尽量不用友元,优先设计 public 对外接口(get/set 函数)
仅运算符重载等特殊极简场景,才少量使用友元函数
杜绝大规模使用友元类,避免类之间权限完全透明

相关新闻

  • 深入解析开源英雄联盟工具包:构建专业级游戏数据分析系统的完整指南
  • 2026钦州金宝阁黄金回收靠谱门店实测 全域上门卖金避坑全攻略 - 润富黄金回收
  • 浅谈次世代代码编辑器 Zed:Rust 原生性能、GPU 渲染

最新新闻

  • 二年级下册语文复习1-8单元:口语交际+写话训练(ppt课件)
  • 代码审查与性能诊断实战:用Gemini镜像站对PHP/Java项目进行自动化深度体检
  • BLE 广播 rawBytes 解析说明
  • 一文读懂主流仓库管理系统,精准选型不踩坑
  • Agent替人打电话:银企直连支付终态确认的语音问询方案探索
  • 5. 油气开采工程

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号