当前位置: 首页 > 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;
}

相关文章:

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

一、友元是什么 我把你添加为我的友元&#xff0c;那么你可以访问我的成员。特别注意&#xff1a;它是单向的。即&#xff0c;我把你添加为我的友元&#xff0c;我却不能访问你的成员&#xff0c;除非你把我添加为你的友元。 以下代码可以让你粗略了解友元的使用。 #includ…...

SQL | 检索数据

1-检索数据 1.1-检索单个列 SELECT prod_name FROM Products; 上述SELECT语句从Products表中检索一个名为prod_name的列。 所要查找的列在select后面&#xff0c;from关键字指出从那个表查询数据。 输出如下&#xff1a; prod_name8 inch teddy bear12 inch teddy bear18…...

typeScript 之 运算符

工具&#xff1a; PlayGround 算术运算符 运算符描述加-减*乘/除%取模(求余)自增–自减 注意和--&#xff0c;实例&#xff1a; let value 0; console.log(value); //0, 先显示再增加后为1 console.log(value); //2&#xff0c;先增加后为2再显示关系运算符 运算符描述 …...

BGP实验

题目 IP地址配置 172.16.X.0/24为模拟用户环回接口接口 172.16.7.X/32为BGP邻居关系建立的环回接口 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; R8&#xff1a; BGP邻居关系建立、宣告和反射器、联邦配置 R…...

pytest fixture 常用参数

fixture 常用的参数 参数一&#xff1a;autouse&#xff0c;作用&#xff1a;自动运行&#xff0c;无需调用 举例一&#xff1a;我们在类中定义一个function 范围的fixture; 设置它自动执行autouseTrue&#xff0c;那么我们看下它执行结果 输出&#xff1a; 说明&#xff1a;…...

vue项目里面有多个模块的服务,前端处理url转发

先看下vue的代理配置里面&#xff1a; 现在是在 /pca 基础上增加了 2个模块的服务&#xff1a; /dca、 /api 现在服务器的nginx 没有在/pca 服务里面做转发接受 /dca、 /api的服务&#xff0c;所以需要前端自己去配置每个服务模块对应的 URL 先拿登录的api 做示例吧: 先定义…...

web表单

在了解了 Flask Bootstrap 基本框架之后&#xff0c;我们来了解一下 Flask 框架的 表单( form )&#xff0c;以帮助我们创建交互式的 Web 应用&#xff0c;最后会有个提交个人信息的例子。 Flask-WTF 是 Flask 框架的一个扩展&#xff0c;用来做表单的交互&#xff0c;是对 WT…...

C++BUG记录:文件无法创建,文件路径正确但使用了Format

问题1&#xff1a;xx.Format()不存在与参数列表匹配的重载函数 问题&#xff1a;文件的路径名字是通过Format转换组合而成的&#xff0c;会报错“FileName.Format()不存在与参数列表匹配的重载函数”。 FileName.Format("%s%d", FilePath, num);//报错&#xff1a;…...

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负载均衡

负载均衡&#xff1a;通过反向代理来实现 Nginx的七层代理和四层代理&#xff1a; 七层是最常用的反向代理方式&#xff0c;只能配置在nginx配置文件的http模块当中 &#xff1b;配置的方法名称为&#xff1a;upstream模块&#xff0c;不能写在server中也不能写在location中&a…...

vue3报错

这是因为eslint对代码的要求严格导致的&#xff0c;可以在package.json里面删掉"eslint:recommended"&#xff0c;然后重启就可以正常运行了...

每日一学——IP地址和子网掩码

IP地址和子网掩码是网络中非常重要的概念。IP地址是用于标识和寻址网络中设备&#xff08;如计算机、手机等&#xff09;的唯一标识符。而子网掩码则用于划分网络中的子网。 IP地址是一个由32位二进制数组成的地址&#xff0c;通常以点分十进制的形式表示&#xff0c;如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 解决鼠标悬浮显示弹窗 迅速离开时弹窗显示到其他位置的延迟问题

解决该问题的思路就是&#xff0c;判断当前鼠标的位置是否在某个div上&#xff0c;如果在这个div上则取消显示悬浮弹窗消息。 首先监听鼠标的移动事件 鼠标移动时判断是否在div里面进行移动了 clientX表示鼠标X的位置 client Y表示鼠标Y的位置 拿到要判断的div元素 获取off…...

树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法

树莓派接上音频首先需要切换音频不是HDMI&#xff0c;然后可以双击运行wav文件可以播放&#xff0c;但是&#xff1a; 命令行直接运行wav文件报错&#xff1a; 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 项目时&#xff0c;无法引入 mysql-connector-j 这个依赖&#xff0c;报错信息&#xff1a; com.mysql:mysql-connector-j:jar:unknown was not foun…...

解释器模式(Interpreter)

解释器模式是一种行为设计模式&#xff0c;可以解释语言的语法或表达式。给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;然后定义一个解释器&#xff0c;使用该文法来解释语言中的句子。解释器模式提供了评估语言的语法或表达式的方式。 Interpreter is a behav…...

python读入和读出图像

python提供了PIL库和opencv库对图像进行读取并保存。 图像读入读出 给定一张RGB的彩色图像&#xff0c;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 &#xff0c;其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀&#xff0c;返回这个公共前缀。 数据范围&#xff1a;0≤n≤5000&#xff0c; 0≤len(strsi)≤5000 进阶&#xff1a;空间复杂度 O(1)&#xff0c;…...

Angular报错:cann‘t bind to ngClass since it is‘t a known property of div

遇到的错误&#xff1a; Cant bind to ngClass since it isnt a known property of div这个错误是 Angular 中 最常见的模板编译错误之一&#xff0c;通常出现在你试图使用 ngClass 指令&#xff0c;但 Angular 没有识别它的情况下。 ✅ 错误的根本原因 Angular 不知道 ngCla…...

uniapp+vue3实现CK通信协议(基于jjc-tcpTools)

1. TCP 服务封装 (tcpService.js) export class TcpService {constructor() {this.connections uni.requireNativePlugin(jjc-tcpTools)this.clients new Map() // 存储客户端连接this.servers new Map() // 存储服务端实例}// 创建 TCP 服务端 (字符串模式)createStringSe…...

AI系统负载均衡与动态路由

载均衡与动态路由 在微服务架构中,负载均衡是实现服务高可用和性能优化的关键机制。传统负载均衡技术通常围绕请求数、连接数、CPU占用率等基础指标进行分发,而在AI系统中,特别是多模型、多异构算力(如CPU、GPU、TPU)共存的环境下,负载均衡不仅要考虑节点资源消耗,还需…...

护网面试题目2025

护网基础试题 一、描述外网打点的流程&#xff1f; 靶标确认、信息收集、漏洞探测、漏洞利用、权限获取。最终的目的是获取靶标的系统权限/关键数据。在这个过程中&#xff0c;信息收集最为重要。掌握靶标情报越多&#xff0c;后续就会有更多的攻击方式去打点。比如&#xff…...

Three.js进阶之音频处理与展示

引擎在对音频处理提供了丰富的接口&#xff0c;本文展示两个音频处理示例。 一、声音可视化 Three.js中的声音可视化是以视觉为核心&#xff0c;以音乐为载体&#xff0c;为音乐提供直观的视觉呈现。通过对音乐数据的分析并结合开发需求&#xff0c;能实现酷炫的视觉效果。在…...

微型导轨在手术机器人领域中有哪些关键操作?

在微创手术领域&#xff0c;手术机器人凭借其高精度、高稳定性和远程操控能力&#xff0c;正逐步成为现代外科手术的重要工具。微型导轨作为一种专为高精度运动设计的线性导向系统&#xff0c;凭借其亚微米级定位精度、低摩擦运动特性及紧凑结构设计&#xff0c;已成为手术机器…...

@Prometheus 监控-MySQL (Mysqld Exporter)

文章目录 **Prometheus 监控 MySQL ****1. 目标****2. 环境准备****2.1 所需组件****2.2 权限要求** **3. 部署 mysqld_exporter****3.1 下载与安装****3.2 创建配置文件****3.3 创建 Systemd 服务****3.4 验证 Exporter** **4. 配置 Prometheus****4.1 添加 Job 到 prometheus…...

ubuntu24.04 使用apt指令只下载不安装软件

比如我想下载net-tools工具包及其依赖包可以如下指令 apt --download-only install net-tools 自动下载的软件包在/var/cache/apt/archives/目录下...

Open SSL 3.0相关知识以及源码流程分析

Open SSL 3.0相关知识以及源码流程分析 编译 windows环境编译1、工具安装 安装安装perl脚本解释器、安装nasm汇编器(添加到环境变量)、Visual Studio编译工具 安装dmake ppm install dmake # 需要过墙2、开始编译 # 1、找到Visual Studio命令行编译工具目录 或者菜单栏直接…...

Mnist手写数字

运行实现&#xff1a; import torch from torch.utils.data import DataLoader from torchvision import transforms from torchvision.datasets import MNIST import matplotlib.pyplot as pltclass Net(torch.nn.Module):#net类神经网络主体def __init__(self):#4个全链接层…...