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

C++类与对象--4 友元

友元的目的,是让一个函数或一个类,可以访问另一个类的私有成员

友元的三种实现

  1. 全局函数做友元
  2. 类做友元
  3. 成员函数做友元

4.1 全局函数做友元

  • 全局函数访问类的私有成员
class Build
{friend void g_func(Build & build); // 在类中做全局函数的声明,并在前面加关键字friendpublic:std::string m_SittingRoom;
private:std::string m_BedRoom;
};
​
void g_func(Build & build) // 全局函数定义
{std::cout << build->m_BedRoom << std::endl; // 访问类的私有成员
}

4.2 类做友元

  • 类访问另一个类的私有成员-->类中所有成员函数可以访问另一个类的私有属性
class Build;    // 类声明,在类FriendOfBuild中使用Build类型
​
class FriendOfBuild
{
public:Build * build;  // Build对象做成员属性FriendOfBuild();void visit();
};
​
FriendOfBuild::FriendOfBuild()
{build = new Build;
}
​
class Build     // Build类定义在FriendOfBuild类后,使“friend class FriendOfBuild;”不报错
{friend class FriendOfBuild;     // 表示FriendOfBuild类可以访问Build类的私有成员
public:std::string m_SittingRoom = "客厅";Build();
private:std::string m_BedRoom = "卧室";
};
​
void FriendOfBuild::visit() // 成员函数的类外实现
{std::cout << build->m_SittingRoom << std::endl;std::cout << build->m_BedRoom << std::endl; // FriendOfBuild类访问Build类的私有成员
}

4.3 成员函数做友元

  • 一个类的成员函数访问另一个类的私有成员-->其他成员函数不能访问另一个类的私有属性
class Build;    // 类声明,在类FriendOfBuild中使用Build类型
​
class FriendOfBuild
{
public:Build * build;  // Build对象做成员属性FriendOfBuild();void visit();void visit2();
};
​
FriendOfBuild::FriendOfBuild()
{build = new Build;
}
​
class Build     // Build类定义在FriendOfBuild类后,使“friend class FriendOfBuild;”不报错
{friend void FriendOfBuild::visit();     // 表示FriendOfBuild类的成员函数visit()// 可以访问Build类的私有成员,但成员函数// visit2()不能访问Build类的私有成员。
public:std::string m_SittingRoom = "客厅";Build();
private:std::string m_BedRoom = "卧室";
};
​
void FriendOfBuild::visit()
{std::cout << build->m_SittingRoom << std::endl;std::cout << build->m_BedRoom << std::endl; // FriendOfBuild类访问Build类的私有成员
}

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

相关文章:

  • 【C++】日期类
  • sherpa-ncnn:音频处理跟不上采集速度 -- 语音转文本大模型
  • Logrotate:配置日志轮转、高效管理Linux日志文件
  • 开发体育比分网站,有哪些坑需要注意的
  • 手搓一个Transformer
  • 以用户为中心的产品才是好产品
  • Kali安装配置JAVA环境和切换JDK版本的最详细的过程
  • BGP综合实验(2)
  • ai agent(智能体)开发 python高级应用7: crawl4ai 0.6.3 加re正则表达式 获取百度中含有 韩立的图片要求横屏图片
  • ts导入vue文件时提示找不到模块或其相应的类型声明问题解决
  • ADVANTEST Q8326光学波长计操作手Operation Manual
  • 升级mysql (rpm安装)
  • MIMO 检测(6)--最大似然检测(1)
  • js逆向反调试的基本 bypass
  • 【C语言】大程序结构
  • Linux详解基本指令(一)
  • 对盒模型的理解
  • 澳大利亚TikTok网络专线+本地化策略:澳洲电商品牌的破局之道
  • 最大子树和--树形dp
  • day30python打卡
  • Rust 学习笔记:关于错误处理的练习题
  • 1-3V升3.2V升压驱动WT7013
  • 反射操作注解的详细说明
  • HTTPS核心机制拆解
  • Windows 如何安装CUDA
  • 【免杀】C2免杀技术(六)进程镂空(傀儡进程)
  • 往现有虚拟环境中增加python3.9.6
  • 万用表如何区分零线、火线、地线
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(3)
  • Pytorch---view()函数