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

C++核心编程学习--对象特性--友元

全局函数做友元

声明一些特殊的类,让其可以访问私有的属性。

#include <iostream>
using namespace std;class Building {//全局函数访问类中的私有属性 friend void  goodGay(Building* building);  //全局函数放在类的最上方,然后写个friendpublic:string m_SittingRoom;   // 客厅Building() {this ->  m_Bedroom = "卧室";this ->  m_SittingRoom = "客厅";}private:string m_Bedroom;   // 卧室
};void goodGay(Building* building) {cout << "好基友正在访问:" << building -> m_Bedroom << endl;cout << "好基友正在访问:" << building -> m_SittingRoom << endl;
}void test01() {Building b;goodGay(&b);
}
int main() {
test01();return 0;
}

友元类

声明一些特殊的类,让其可以访问私有的属性。

#include <iostream>
using namespace std;// 由于别的类中会使用Building类对象,所以先声明 Building类
class Building;
class GoodGay{
public:GoodGay();void visit();   // 参观函数访问building中的属性private:Building *building;
};class Building {// 告诉编译器GoodGay类是 building类的好朋友,可以访问Building类中的私有内容friend GoodGay;
public:Building(); // 构造函数类内声明,类外实现string m_SittingRoom; //客厅
private:string m_BedRoom; //卧室
};// 类外实现成员函数
// Building::的意思是告诉编译器 ,Building类中的成员函数
Building::Building() {this -> m_SittingRoom = "客厅";this -> m_BedRoom = "卧室";
}GoodGay::GoodGay() {// 创建Building对象building = new Building;    //初始化指针成员并分配内存,类似于执行 Building* p = new Building;
}// visit函数类外实现
void GoodGay::visit() {cout << "好基友正在访问" << building -> m_SittingRoom << endl;cout << "好基友正在访问" << building -> m_BedRoom << endl;
}void test() {GoodGay g;g.visit();
}
int main() {test();return 0;
}

成员函数做友元

#include <iostream>
using namespace std;class Building;
class goodGay
{
public:goodGay();void visit(); //只让visit函数作为Building的好朋友,可以发访问Building中私有内容void visit2();private:Building *building;
};class Building
{//告诉编译器  goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容friend void goodGay::visit();public:Building();public:string m_SittingRoom; //客厅
private:string m_BedRoom;//卧室
};Building::Building()
{this->m_SittingRoom = "客厅";this->m_BedRoom = "卧室";
}goodGay::goodGay()
{building = new Building;
}void goodGay::visit()
{cout << "好基友正在访问" << building->m_SittingRoom << endl;cout << "好基友正在访问" << building->m_BedRoom << endl;
}void goodGay::visit2()
{cout << "好基友正在访问" << building->m_SittingRoom << endl;//cout << "好基友正在访问" << building->m_BedRoom << endl;
}void test01()
{goodGay  gg;gg.visit();}int main() {test01();return 0;
}
http://www.xdnf.cn/news/1194661.html

相关文章:

  • [C/C++内存安全]_[中级]_[再次探讨避免悬垂指针的方法和检测空指针的方法]
  • OpenCV学习探秘之一 :了解opencv技术及架构解析、数据结构与内存管理​等基础
  • React入门学习——指北指南(第三节)
  • 云计算技术之docker build构建错误
  • Swagger 配置及使用指南
  • sklearn库中有关于数据集的介绍
  • 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
  • 【计算机组成原理】第一章:计算机系统概述
  • Django+celery异步:拿来即用,可移植性高
  • 【408二轮强化】数据结构——线性表
  • C++ TAP(基于任务的异步编程模式)
  • 在VS Code中运行Python:基于Anaconda环境或Python官方环境
  • 如何在 Ubuntu 24.04 或 22.04 中创建自定义 Bash 命令
  • 机器学习——随机森林算法分类问题案例解析(sklearn)
  • Nacos-服务注册,服务发现(二)
  • 智慧城市多目标追踪精度↑32%:陌讯动态融合算法实战解析
  • bmp280的压力数据采集(i2c设备驱动+设备树编写)
  • 数据结构 二叉树(3)---层序遍历二叉树
  • 知识图谱的初步探索
  • 智慧农业病虫害识别准确率↑32%:陌讯多模态融合算法实战解析
  • 特产|基于SSM+vue的南阳特产销售平台(源码+数据库+文档)
  • LLM中 词嵌入向量中的正负值表示什么含义
  • GO 从入门到精通
  • python---元组解包(Tuple Unpacking)
  • VisionPro系列讲解 - 03 Simulator 模拟器使用
  • 【RHCSA 问答题】第 13 章 访问 Linux 文件系统
  • Windows Server存储池,虚拟磁盘在系统启动后不自动连接需要手动连接
  • 【js】Function.prototype.apply与Function.prototype.apply.call
  • 学习日志19 python
  • 电子电气架构 --- 高阶智能驾驶对E/E架构的新要求