【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;
}
相关文章:
【C++】友元(含内部类)
一、友元是什么 我把你添加为我的友元,那么你可以访问我的成员。特别注意:它是单向的。即,我把你添加为我的友元,我却不能访问你的成员,除非你把我添加为你的友元。 以下代码可以让你粗略了解友元的使用。 #includ…...
SQL | 检索数据
1-检索数据 1.1-检索单个列 SELECT prod_name FROM Products; 上述SELECT语句从Products表中检索一个名为prod_name的列。 所要查找的列在select后面,from关键字指出从那个表查询数据。 输出如下: prod_name8 inch teddy bear12 inch teddy bear18…...
typeScript 之 运算符
工具: PlayGround 算术运算符 运算符描述加-减*乘/除%取模(求余)自增–自减 注意和--,实例: let value 0; console.log(value); //0, 先显示再增加后为1 console.log(value); //2,先增加后为2再显示关系运算符 运算符描述 …...
BGP实验
题目 IP地址配置 172.16.X.0/24为模拟用户环回接口接口 172.16.7.X/32为BGP邻居关系建立的环回接口 R1: R2: R3: R4: R5: R6: R7: R8: BGP邻居关系建立、宣告和反射器、联邦配置 R…...
pytest fixture 常用参数
fixture 常用的参数 参数一:autouse,作用:自动运行,无需调用 举例一:我们在类中定义一个function 范围的fixture; 设置它自动执行autouseTrue,那么我们看下它执行结果 输出: 说明:…...
vue项目里面有多个模块的服务,前端处理url转发
先看下vue的代理配置里面: 现在是在 /pca 基础上增加了 2个模块的服务: /dca、 /api 现在服务器的nginx 没有在/pca 服务里面做转发接受 /dca、 /api的服务,所以需要前端自己去配置每个服务模块对应的 URL 先拿登录的api 做示例吧: 先定义…...
web表单
在了解了 Flask Bootstrap 基本框架之后,我们来了解一下 Flask 框架的 表单( form ),以帮助我们创建交互式的 Web 应用,最后会有个提交个人信息的例子。 Flask-WTF 是 Flask 框架的一个扩展,用来做表单的交互,是对 WT…...
C++BUG记录:文件无法创建,文件路径正确但使用了Format
问题1:xx.Format()不存在与参数列表匹配的重载函数 问题:文件的路径名字是通过Format转换组合而成的,会报错“FileName.Format()不存在与参数列表匹配的重载函数”。 FileName.Format("%s%d", FilePath, num);//报错:…...
nodejs框架 express koa介绍以及从零搭建 koa 模板
express 下载 npm install express搭建服务 const express require("express");const app express();app.get("/home", (req, res) > {res.send("home"); });app.listen(3000, () > {console.log("http://127.0.0.1:3000")…...
84 | Python可视化篇 —— Pyecharts数据可视化
文章目录 1. 简介安装和环境设置2. 基本图表类型折线图(Line Chart)散点图(Scatter Plot)柱状图(Bar Chart)饼图(Pie Chart)地理地图(Geo Map)3. 数据处理和图表配置4. 高级图表类型5. 自定义选项和交互性6. 数据可视化和动态图7. 组合图表和多子图1. 简介 Pyechart…...
【Nginx】Nginx负载均衡
负载均衡:通过反向代理来实现 Nginx的七层代理和四层代理: 七层是最常用的反向代理方式,只能配置在nginx配置文件的http模块当中 ;配置的方法名称为:upstream模块,不能写在server中也不能写在location中&a…...
vue3报错
这是因为eslint对代码的要求严格导致的,可以在package.json里面删掉"eslint:recommended",然后重启就可以正常运行了...
每日一学——IP地址和子网掩码
IP地址和子网掩码是网络中非常重要的概念。IP地址是用于标识和寻址网络中设备(如计算机、手机等)的唯一标识符。而子网掩码则用于划分网络中的子网。 IP地址是一个由32位二进制数组成的地址,通常以点分十进制的形式表示,如192.16…...
【redis 3.2 集群】
目录 一、Redis主从复制 1.概念 2.作用 2.1 数据冗余 2.2 故障恢复 2.3 负载均衡 2.4 高可用 3.缺点 4.流程 4.1 第一步 4.2 第二步 4.3 第三步 4.4 第四步 5.搭建 5.1 主 5.2 从 6.验证 二、Reids哨兵模式 1.概念 2.作用 2.1 监控 2.2 自动故障转移 2.…...
JS 解决鼠标悬浮显示弹窗 迅速离开时弹窗显示到其他位置的延迟问题
解决该问题的思路就是,判断当前鼠标的位置是否在某个div上,如果在这个div上则取消显示悬浮弹窗消息。 首先监听鼠标的移动事件 鼠标移动时判断是否在div里面进行移动了 clientX表示鼠标X的位置 client Y表示鼠标Y的位置 拿到要判断的div元素 获取off…...
树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法
树莓派接上音频首先需要切换音频不是HDMI,然后可以双击运行wav文件可以播放,但是: 命令行直接运行wav文件报错: Playing WAVE twzc.wav : Signed 16 bit Little Endian, Rate 16000 Hz, Mono命令行运行main方法也是无法播放&am…...
解决无法引入 mysql-connector-j 的问题
开发环境 Windows 10Oracle JDK 1.8Maven 3.8.8IntelliJ IDEA 2022.2.2 问题 在使用 Spring initializr 创建 Spring Boot 项目时,无法引入 mysql-connector-j 这个依赖,报错信息: com.mysql:mysql-connector-j:jar:unknown was not foun…...
解释器模式(Interpreter)
解释器模式是一种行为设计模式,可以解释语言的语法或表达式。给定一个语言,定义它的文法的一种表示,然后定义一个解释器,使用该文法来解释语言中的句子。解释器模式提供了评估语言的语法或表达式的方式。 Interpreter is a behav…...
python读入和读出图像
python提供了PIL库和opencv库对图像进行读取并保存。 图像读入读出 给定一张RGB的彩色图像,PIL库将其读入: import cv2 from PIL import Image # 读入图像 image2 Image.open(cub1.jpg) print(type(image2)) image2_array np.array(image2) print(image2_array…...
每日一题——最长公共前缀
题目 给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。 数据范围:0≤n≤5000, 0≤len(strsi)≤5000 进阶:空间复杂度 O(1),…...
FanControl终极指南:Windows电脑风扇控制的完整解决方案
FanControl终极指南:Windows电脑风扇控制的完整解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/…...
上市公司-政府采购合同公告相关数据(2016-2024年)
01、数据简介本地创新采购、中央创新采购以及大学和研究机构创新采购对企业的创新激励作用更显著;政府创新采购对战略性新兴行业企业、民营企业和中小企业的创新激励作用更强。进一步分析发现,总体上需求侧的创新采购和供给侧的创新补贴对企业创新具有相…...
Vue ECharts构建优化终极指南:从2.8MB到300KB的实战深度解析
Vue ECharts构建优化终极指南:从2.8MB到300KB的实战深度解析 【免费下载链接】vue-echarts Vue.js component for Apache ECharts™. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-echarts Vue ECharts作为Vue.js生态中最强大的数据可视化组件库之一&am…...
架构创新与性能突破:DeepFilterNet全频段实时语音增强技术解决方案
架构创新与性能突破:DeepFilterNet全频段实时语音增强技术解决方案 【免费下载链接】DeepFilterNet Noise supression using deep filtering 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet 在远程通信、语音交互和音频处理领域࿰…...
VOFA+不止能看波形:手把手教你打造专属直流电机PID调试上位机界面
从零构建直流电机PID调试神器:VOFA高级界面设计实战 调试直流电机PID参数时,你是否厌倦了反复烧录代码、查看波形的低效循环?传统调试方式如同蒙眼走钢丝——每次参数调整都伴随着漫长的编译等待和结果不确定性。本文将彻底改变这一局面&…...
【无人机三维路径规划】基于人工蜂群算法实现无人机三维路径规划含Matlab代码
⛄ 内容介绍随着无人机可执行任务的多样化,航迹规划成为其顺利完成任务的基本前提。针对该问题,提出了基于人工蜂群算法的无人机航迹规划方法。运用等效地形模拟方法,将作战区域中的敌方威胁、地形障碍等效为山峰,构建了无人机航迹…...
UE4/UE5 UMG控件速查手册:从Canvas到Widget Switcher,新手避坑指南
UE4/UE5 UMG控件速查手册:从Canvas到Widget Switcher,新手避坑指南 第一次打开虚幻引擎的UMG编辑器时,面对琳琅满目的控件列表,大多数新手都会感到迷茫——Canvas和Border有什么区别?什么时候该用Wrap Box而不是Unifor…...
别再手动改Word了!用Python的python-docx库批量生成周报,5分钟搞定
职场效率革命:用Python-docx实现周报自动化全流程指南 每周五下午,市场部的张经理总要面对同样的烦恼——从十几个Excel表格中复制粘贴数据,调整格式,再手动填入Word周报模板。这种重复劳动不仅消耗两小时宝贵时间,还容…...
地理加权回归(GWR)带宽怎么选?R语言中aic、cv、经验法全对比与避坑指南
地理加权回归(GWR)带宽选择实战:R语言中AIC、CV与经验法的深度评测 空间数据分析中,地理加权回归(GWR)因其能够捕捉空间异质性而备受青睐。但许多研究者在模型构建过程中,往往被一个看似简单却至关重要的问题困扰——如何选择最优带宽&#x…...
Go 语言从入门到进阶 | 第 8 章:并发编程——Goroutine 与 Channel
系列:Go 语言从入门到进阶 作者:耿雨飞 适用版本:go v1.26.2 前置条件 在开始本章学习之前,请确保: 已完成前七章的学习,掌握函数、接口和泛型基础 理解函数作为一等公民的概念(闭包、函数类型) 已获取 Go 1.26.2 源码树(go-go1.26.2 目录) 导读 并发是 Go 语言最核…...
