环境:
编译器:CLion2021.3;操作系统:macOS Ventura 13.0.1

文章目录

  • 一、全局函数做友元
  • 二、类做友元
  • 三、成员函数做友元

地表最强C++系列传送门:
「地表最强」C++核心编程(一)内存分区模型
「地表最强」C++核心编程(二)引用
「地表最强」C++核心编程(三)函数提高
「地表最强」C++核心编程(四)类和对象----封装
「地表最强」C++核心编程(五)类和对象----对象初始化和清理
「地表最强」C++核心编程(六)类和对象----对象模型和this指针
「地表最强」C++核心编程(七)类和对象----友元
「地表最强」C++核心编程(八)类和对象----运算符重载
「地表最强」C++核心编程(九)类和对象----继承
「地表最强」C++核心编程(十)类和对象----多态
「地表最强」C++核心编程(十一)文件操作

在类中定义的成员属性往往是private,外界是无法访问的。若有特殊需求想让外界可以访问这些私有属性,可以把允许访问的这个外界设置为本类的友元。

一、全局函数做友元

class Building {//告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容friend void goodGay(Building *building);public:string m_SittingRoom; //客厅
private:string m_BedRoom; //卧室public:Building() {this->m_SittingRoom = "客厅";this->m_BedRoom = "卧室";}
};void goodGay(Building *building) {cout << "好基友正在访问: " << building->m_SittingRoom << endl;//okcout << "好基友正在访问: " << building->m_BedRoom << endl;//ok,若不将goodGay设为友元则err
}

二、类做友元

class Building {//告诉编译器 goodGay类是本类的好朋友,可以访问到Building类中私有内容friend class goodGay;public:string m_SittingRoom; //客厅
private:string m_BedRoom;//卧室public:Building();
};class goodGay {private:Building *building;public:goodGay();void visit();//访问Building的属性
};Building::Building() {//类外实现成员函数this->m_SittingRoom = "客厅";this->m_BedRoom = "卧室";
}goodGay::goodGay() {building = new Building;
}void goodGay::visit() {cout << "好基友正在访问" << building->m_SittingRoom << endl;//okcout << "好基友正在访问" << building->m_BedRoom << endl;//ok
}

三、成员函数做友元

class Building {//告诉编译器  goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容friend void goodGay::visit();public:string m_SittingRoom; //客厅
private:string m_BedRoom;//卧室public:Building();
};class goodGay {private:Building *building;
public:goodGay();void visit(); //只让visit函数作为Building的好朋友,可以发访问Building中私有内容void visit2();
};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;//err,因为只声明了visit是友元而没有把visit2声明为友元
}

「地表最强」C++核心编程(七)类和对象--友元相关推荐

  1. 「地表最强」C++核心编程(五)类和对象--对象初始化和清理

    环境: 编译器:CLion2021.3:操作系统:macOS Ventura 13.0.1 文章目录 一.构造函数和析构函数 1.1 构造函数 1.2 析构函数 1.3 示例 二.构造函数的分类及调用 ...

  2. 第四部分—C++核心编程_4. 类和对象

    4.1 类和对象的基本概念 4.1.1 C和C++中struct区别 c语言struct中只有变量 c++语言struct中既有变量,也有函数 4.1.2 类的封装 我们编写程序的目的是为了解决现实中 ...

  3. C++核心编程4— 类和对象

    C++面向对象的三大特性为:封装.继承.多态 C++认为万事万物都皆为对象,对象上有其属性和行为 例如: ​ 人可以作为对象,属性有姓名.年龄.身高.体重-,行为有走.跑.跳.吃饭.唱歌- ​ 车也可 ...

  4. C++核心编程<类和对象>(4)

    C++核心编程<类和对象> 4.类和对象 4.1封装 4.1.1封装的意义 封装的意义1 封装的意义2 4.1.2struct和class区别 4.1.3成员属性设置为私有 4.2对象的初 ...

  5. 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)

    黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...

  6. 苹果M1「徒有其表」?「地表最强」芯只能剪视频引知乎热议

    来源:新智元 [导读]5nm工艺,570亿晶体管,70%CPU性能提升,4倍GPU性能提升.号称史上最强芯片的M1 Max,只能「剪剪视频」? 最近,苹果开了一个芯片新品发布会. 光看参数,M1 Pr ...

  7. 【黑马程序员】C++核心编程2 -类与对象(封装、继承和多态)-this指针-友元-运算重载符-文本操作(附测试用例源码、测试结果图及详细注释)

  8. 【Python】Python语言学习:面向对象编程,类和对象,封装、继承和多态

    这一周Python语言学习,记录如下. 01 面向对象编OOP 1.1 为什么学习和应用OOP? 1 OOP适合更加复杂的需求分析和项目开发. 2 OOP具有更强大的封装能力. 3 OOP相比于面向过 ...

  9. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

最新文章

  1. 【 FPGA 】7 Series FPGA中对MUX的设计指导
  2. java CAS和AQS
  3. hdu1428 spfa+记忆化搜索
  4. 高并发编程-深入分析wait和sleep的区别并结合源码示例佐证
  5. 数字图像处理:第四章 点运算
  6. resultset需要关闭吗_微信视频号能关闭吗?怎么操作?3秒教你搞定
  7. EDM邮件群发十大技巧提升邮件群发效果
  8. 双重检查锁实现单例模式的线程安全问题
  9. SpringBoot vue图片上传不能立即回显问题解决
  10. 盘点过去10年美国规模最大科技公司IPO:阿里一直是纪录保持者
  11. Java中List集合的三种遍历方式(全网最详)
  12. 【转】利用匿名namespace解决C++中重复定义的问题
  13. 信息检索的过去 当前 未来-------浅层分析报告
  14. quartz定时任务cron表达式详解
  15. 用混淆矩阵计算kappa系数
  16. Android App 启动时显示正在加载图片(讲解+源码)
  17. 鸿蒙OS不支持游戏,部分安卓游戏在华为鸿蒙 OS 上运行,被识别成使用 PC 端模拟器...
  18. 十七节 samba nfs共享
  19. staf linux运行模式,【转】windows和linux下安装STAF
  20. elasticsearch使用脚本 滚动关闭索引,更新index setting

热门文章

  1. JMeter 通用 HTTP 自定义采样器
  2. C++:用memset初始化数组
  3. 最黑外包文思海辉西安分公司(连载一)
  4. 经典好用的list分页方法
  5. 钱诚11.12黄金原油行情走势分析伦敦金美盘投资操作建议
  6. 系统维护的目的和任务
  7. 击败DotA2顶级人类玩家,并不是AI的一次突破
  8. 0.1+0.7= 0.7999999999999999
  9. 一次关于Kafka消息不消费的记录
  10. Linux 系统出现电流音解决方案