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

【C++】友元(含内部类)

一、友元是什么

我把你添加为我的友元,那么你可以访问我的成员。特别注意:它是单向的。即,我把你添加为我的友元,我却不能访问你的成员,除非你把我添加为你的友元。 

以下代码可以让你粗略了解友元的使用。

#include<iostream>
using namespace std;class Date
{
//设置友元friend ostream& operator<< (ostream& cout, const Date& d);public:// 获取某年某月的天数int GetMonthDay(int year, int month){int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){days[2] = 29;}return days[month];// 全缺省的构造函数Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;if (month < 1 || month > 12 || day < 1 || day > GetMonthDay(year, month)){cout << "非法日期" << endl;}}// 拷贝构造函数// d2(d1)Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}// 赋值运算符重载// d2 = d3 -> d2.operator=(&d2, d3)Date& operator=(const Date& d){_year = d._year;_month = d._month;_day = d._day;return *this;}// 析构函数~Date(){;}private:int _year;int _month;int _day;};//运算符重载
ostream& operator<< (ostream& cout, const Date& d)
{cout << d._year << "年" << d._month << "月" << d._day << "日" << endl;return cout;
}

二、友元——友元函数/友元类

关于友元,我们要注意以下几点:

友元函数可访问类的私有和保护成员,但不是类的成员函数
友元函数不能使用const修饰
友元函数可以在类定义的任何地方声明,不受访问限定符(public/private/protected)限制
一个函数可以是多个类的友元函数
友元函数的调用与普通函数的调用原理相同
 

三、内部类

内部类天生就是外部类的友元 

BB类受AA类域和访问限定符的限制,它们是两个独立的类


class AA
{
public:class BB{public:void FuncBB(){AA aa;aa._a = 1;}private:int _b;};private:int _a;
};int main()
{cout << sizeof(AA) << endl;AA aa;//创建BB类的对象bb1AA::BB bb1;//const引用会延长匿名对象生命周期//ref出了作用域,匿名对象就销毁了const AA& ref = AA();return 0;
}

http://www.lryc.cn/news/119451.html

相关文章:

  • SQL | 检索数据
  • typeScript 之 运算符
  • BGP实验
  • pytest fixture 常用参数
  • vue项目里面有多个模块的服务,前端处理url转发
  • web表单
  • C++BUG记录:文件无法创建,文件路径正确但使用了Format
  • nodejs框架 express koa介绍以及从零搭建 koa 模板
  • 84 | Python可视化篇 —— Pyecharts数据可视化
  • 【Nginx】Nginx负载均衡
  • vue3报错
  • 每日一学——IP地址和子网掩码
  • 【redis 3.2 集群】
  • JS 解决鼠标悬浮显示弹窗 迅速离开时弹窗显示到其他位置的延迟问题
  • 树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法
  • 解决无法引入 mysql-connector-j 的问题
  • 解释器模式(Interpreter)
  • python读入和读出图像
  • 每日一题——最长公共前缀
  • iOS开发-WebRTC本地直播高分辨率不显示画面问题
  • python项目virtualenv环境部署正式项目和后台运行实践
  • 平替 Docker - 玩转容器新利器 Podman Desktop (视频)
  • nodejs+vue+elementui招聘求职网站系统的设计与实现-173lo
  • 静态链接(7/13)
  • jvs-rules API数据源配置说明(含配置APIdemo视频)
  • 爬虫来介绍ChromeF12 谷歌开发者工具 -Network
  • [足式机器人]Part4 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】
  • Android isLoggable定制属于自己的log
  • 【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档
  • 【实战】 九、深入React 状态管理与Redux机制(五) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十)