当前位置: 首页 > 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.lryc.cn/news/600302.html

相关文章:

  • ICMPv4报文类型详解表
  • GRE及MGRE应用综合实验
  • Spring AI 项目实战(二十):基于Spring Boot + AI + DeepSeek的智能环境监测与分析平台(附完整源码)
  • SpringMVC——请求
  • 常见代码八股
  • 0基础法考随手笔记 03(刑诉05 刑事证据与证明+06 强制措施)
  • Kafka MQ 消费者应用场景
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • DAY31 整数矩阵及其运算
  • 【C++】位运算符
  • 解锁反向海淘独立站:国内电商平台 API 接口全解析
  • LeetCode 1074:元素和为目标值的子矩阵数量
  • OGG同步Oracle到Kafka不停库,全量加增量
  • 【愚公系列】《MIoT.VC》003-构建基本仿真工作站(组件的属性、行为、视频展示)
  • Javaweb————什么是超文本传输协议?
  • HiggsAudio-V2: 融合语言与声音的下一代音频大模型
  • 详解力扣高频SQL50题之550. 游戏玩法分析 IV【中等】
  • 原理篇..
  • 2025年入局苹果Vision Pro开发:从零到发布的完整路线图
  • 路由选择工具——IP-Prefix
  • Triton Server部署Embedding模型
  • 谷粒商城170缓存序列化报错
  • 如何查看电脑后门IP和流量?
  • 图论:Dijkstra算法
  • CPU 为什么需要缓存?揭开速度与效率的底层逻辑
  • 大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
  • 机器学习——随机森林算法分类问题案例解析(sklearn)
  • Linux系统架构核心全景详解
  • HAProxy 实验指南:从零开始搭建高可用负载均衡系统
  • sssss