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

C++笔记

文章目录

      • 模板类
    • 函数
      • 什么是友元函数?
      • 什么是内联函数?
    • VECTOR
    • 哈希表
    • 队列
    • 映射与解除映射
      • mmap()
      • munmap
    • 可变参数 va_start()-va_send()
      • vsnprintf()
    • C/C++异常处理
    • list
    • 红黑树

基类、父类、顶层类、抽象类
子类、派生类

模板类

在C++中,模板类(Template Class)是一种通用的类模板,可以根据不同的数据类型生成具体的类。模板类允许将类的定义与实际使用分离,提供了代码复用和泛型编程的方式。

模板类的语法形式如下:

template <typename T>
class ClassName {// 类成员和方法
};

其中,template 是模板声明的开始部分,T 是一个占位符类型,表示在实例化模板时将被替换为具体的数据类型。T 可以根据需要自定义,比如使用 typename 或 class 关键字来指定类型参数。

通过使用模板类,可以创建适用于不同数据类型的对象,而无需为每个特定数据类型编写单独的类定义。例如,以下是一个模板类 Stack 的示例代码:

template <typename T>
class Stack {
private:T* stackArray;  // 数据存储数组int top;        // 栈顶指针int capacity;   // 栈的容量public:Stack(int size) : capacity(size), top(-1) {stackArray = new T[capacity];}~Stack() {delete[] stackArray;}void push(const T& item) {if (top == capacity - 1) {// 栈已满// 扩展栈的容量或抛出异常...} else {stackArray[++top] = item;}}T pop() {if (top == -1) {// 栈为空// 抛出异常或返回默认值...} else {return stackArray[top--];}}// 其他栈操作方法...
};

在上述示例中,Stack 是一个模板类,使用 typename T 作为类型参数。在模板类的成员函数中,可以使用 T 表示具体的数据类型。

通过实例化模板类,可以创建不同类型的栈对象,如 Stack、Stack 等。编译器会根据实际使用情况自动进行类型推导,生成对应的具体代码。

Stack<int> intStack(10);
intStack.push(42);
int poppedItem = intStack.pop();Stack<double> doubleStack(5);
doubleStack.push(3.14);
double poppedItem = doubleStack.pop();

模板类的优点是可以提供通用和灵活的代码,适用于多种数据类型。它能够在编译时进行类型检查,并减少代码冗余。模板类广泛应用于容器类(如向量、链表、队列、映射等)、算法和数据结构的实现。

需要注意的是,模板类的定义通常直接放在头文件中,因为编译器需要在每个使用模板类的地方生成相应的代码。

函数

什么是友元函数?

在C++中,友元函数(friend function)是在类的声明中被声明为友元的非成员函数。友元函数可以访问类的私有成员和受保护成员,即使它们不是类的成员。通过友元函数,我们可以允许其他函数或类直接访问另一个类的私有或受保护成员。

下面是一些关于友元函数的特点和用途:

友元函数的声明通常出现在类的内部,但不是类的成员函数。它可以在类的任何地方进行声明,例如在公共、私有或保护部分。

友元函数的定义必须在类外部进行,与类的定义分开。

友元函数在其定义中使用类的对象作为参数来访问类的成员。

友元函数被声明为友元后,它就可以直接访问该类的私有成员和受保护成员,而无需通过对象调用。

友元函数不继承,也不属于类的成员,因此不能被派生类继承。

友元函数对于需要操作类的私有数据或实现与该类紧密相关的功能的函数非常有用。例如,在重载运算符时,可以使用友元函数来直接访问类的私有成员并执行相应的操作。另一个例子是,如果你想实现一个函数,该函数需要访问多个类的私有成员以执行某些操作,那么你可以将该函数声明为这些类的友元函数。

下面是一个简单的示例,展示了友元函数的使用:

#include <iostream>class MyClass {
private:int data;public:MyClass(int value) : data(value) {}friend void printData(const MyClass& obj);
};void printData(const MyClass& obj) {std

相关文章:

C++笔记

文章目录 类模板类函数什么是友元函数?什么是内联函数?VECTOR哈希表栈队列映射与解除映射mmap()munmap可变参数 va_start()-va_send()vsnprintf()C/C++异常处理list红黑树类 基类、父类、顶层类、抽象类 子类、派生类 模板类 在C++中,模板类(Template Class)是一种通用…...

python-opencv 培训课程笔记(1)

python-opencv 培训课程笔记&#xff08;1&#xff09; 博主参加了一次opencv库的培训课程&#xff0c;把课程所学整理成笔记&#xff0c;供大家学习&#xff0c;第一次课程包括如下内容&#xff1a; 1.读取图像 2.保存图像 3.使用opencv库显示图像 4.读取图像为灰度图像 …...

【C++初阶】STL详解(七)Stack与Queue的模拟实现

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…...

校园报修抢修小程序系统开发 物业小区报修预约上门维修工单系统

开发的功能模块有&#xff1a; 1.报修工单提交&#xff1a;学生、教职员工等可以使用小程序提交报修请求。这通常包括选择报修的问题类型&#xff08;如水漏、电器故障、照明问题等&#xff09;&#xff0c;地点&#xff0c;报修联系人&#xff0c;联系电话等&#xff0c;并提供…...

【Android】Hilt比Android好在哪里

Hilt框架的功能和设计理念&#xff0c;和Dagger基本是完全一致的&#xff0c;Hilt也是完全在Dagger基础上进行开发的 但是Dagger的用法比较繁琐&#xff0c;Hilt主要是做了便用性上的改进&#xff0c;主要有以下点 提供常用Component&#xff0c;不用再为每个InjectTarget都创…...

计算方法 期末总结

思维导图 绪论 算法的性质&#xff1a; 有穷性、确切性、有输入输出、可行性 算法的描述方法&#xff1a; 自然语言、伪代码、流程图、N-S流程图 算法设计思想&#xff1a; 化大为小的缩减技术&#xff1a;二分法化难为易的校正技术&#xff1a;开方法化粗为精的松弛技术&a…...

【面试】jvm中堆是分配对象存储的唯一选择吗

目录 一、说明二、逃逸分析2.1 说明2.2 参数设置 一、说明 1.在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述:随着JIT编译期的发展与逃逸分析技术逐渐成熟&#xff0c;栈上分配、标量替换优化技术将会导致一些微妙的变化&#xff0c;所有的对象都分配到堆上也渐渐变得…...

音视频同步笔记 - 以音频时间为基

音视频同步 - 以音频时间为基 上图介绍&#xff1a; 该图是以音频的时间为基&#xff0c;对视频播放时间的延迟控制方案&#xff0c;只调整视频的播放延时。delayTime是视频播放的延迟时间&#xff0c;初始值是1 / FPS * 1000 (ms)&#xff0c;如果FPS为25帧率&#xff0c;初始…...

JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系

JavaScript 原始数据类型和对应的对象类型&#xff08;内置对象&#xff09;之间的关系 JavaScript 的原始&#xff08;primitive&#xff09;数据类型包括包括数字&#xff08;Number&#xff09;、字符串&#xff08;String&#xff09;、布尔值&#xff08;Boolean&#xf…...

报错For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

.报错For debugging consider passing CUDA_LAUNCH_BLOCKING1. /aten/src/ATen/native/cuda/NLLLoss2d.cu:103: nll_loss2d_forward_kernel: block: [29,0,0], thread: [707,0,0] Assertion t > 0 && t < n_classes failed. 报错信息如下&#xff1a; ./aten/…...

whisper使用方法

看这个 github https://github.com/Purfview/whisper-standalone-win/tags下载 视频提取音频 ffmpeg -i 222.mp4 -vn -b:a 128k -c:a mp3 output.mp3截取4秒后的音频 ffmpeg -i output.mp3 -ss 4 -c copy output2.mp3使用 whisper-faster.exe 生成字幕 whisper-faster.exe …...

通过easyexcel实现数据导入功能

上一篇文章通过easyexcel导出数据到excel表格已经实现了简单的数据导出功能&#xff0c;这篇文章也介绍一下怎么通过easyexcel从excel表格中导入数据。 目录 一、前端代码 index.html index.js 二、后端代码 controller service SongServiceImpl 三、功能预览 四、后端…...

Springboot_文件下载功能(前端后端)

遇到的问题&#xff1a; 文件下载后文件一直被破坏&#xff0c;无法正常打开文件名乱码&#xff0c;如图 刚开始一直在纠结&#xff0c;是不是后端没有写对&#xff0c;然后导致下载不能使用 后来搜索了一些资料&#xff0c;发现后端没什么问题 然后就开始找到其他项目对比…...

Vue框架学习笔记——v-bind数据单向绑定和v-model数据双向绑定

文章目录 v-bind&#xff0c;数据单向绑定简写形态&#xff08;省略v-bind&#xff0c;只留冒号&#xff09;示例一&#xff08;将输入框数据改为&#xff1a;哈哈哈哈哈&#xff09;&#xff1a;实例二&#xff08;将Vue实例中的name改为字符串&#xff1a;"单向绑定&quo…...

将对象转成URL参数

背景 有的时候前端跳转到其他平台的页面需要携带额外的参数&#xff0c;需要将对象转成用 & 连接的字符串拼接在路径后面。 实现方法...

【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

超级武器!深入LoadRunner性能测试流程及极速分析结果!

性能测试目的 1 什么是性能测试? 性能测试是通过性能的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 负载测试和压力测试都属于性能测试&#xff0c;两者可以结合进行。通过负载测试&#xff0c;确定在各种工作负载下系统的性能&#xff0…...

解决requests库进行爬虫ip请求时遇到的错误的方法

目录 一、超时错误 二、连接错误 三、拒绝服务错误 四、内容编码错误 五、HTTP错误 在利用requests库进行网络爬虫的IP请求时&#xff0c;我们可能会遇到各种错误&#xff0c;如超时、连接错误、拒绝服务等等。这些错误通常是由目标网站的限制、网络问题或我们的爬虫代码中…...

大语言模型领域的重要术语解释

前言 本人对人工智能非常感兴趣&#xff0c;目前是一名初学者&#xff0c;在研究大语言模型的一些内容。很多模型都是用英文提出的&#xff0c;其中也包括很多概念&#xff0c;有些概念的中文翻译和其想表达的意思不完全一样&#xff0c;所以在这里&#xff0c;想更加精准地帮…...

无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面&#xff0c;使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口&#xff0c;无需公网IP&#xff0c;无需设置路由器。 1.openWRT安装cpola…...

基于微信小程序的小区服务管理系统pf(文档+源码)_kaic

5 系统实现5.1管理员功能介绍5.1.1管理员登录系统登录功能是程序必不可少的功能&#xff0c;在登录页面必填的数据有两项&#xff0c;一项就是账号&#xff0c;另一项数据就是密码&#xff0c;当管理员正确填写并提交这二者数据之后&#xff0c;管理员就可以进入系统后台功能操…...

php内核 PHP内核版本号、版权信息本地化修改

最佳方式不是到处乱改源码&#xff0c;而是做“最小补丁 统一开关 自动打补丁编译”。 这样后面升级─PHP─8.2─->─8.3─不会痛苦。──────────────────────────────────────────…...

标注精度提升47%的关键配置,自动驾驶公司内部未公开的Python标注流水线调优手册

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;标注精度提升47%的关键配置&#xff0c;自动驾驶公司内部未公开的Python标注流水线调优手册 在高精地图与BEV感知模型训练中&#xff0c;标注误差是导致mAP下降的首要隐性瓶颈。某头部自动驾驶公司通过…...

高效实现PotPlayer实时字幕翻译:百度翻译插件完整配置指南

高效实现PotPlayer实时字幕翻译&#xff1a;百度翻译插件完整配置指南 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为观看外语视…...

MySQL 核心进阶:开窗函数、事务、视图、索引与范式

MySQL 核心进阶&#xff1a;开窗函数、事务、视图、索引与范式 在掌握基本的多表查询后&#xff0c;要想真正高效地使用 MySQL&#xff0c;就必须理解数据库的设计规范&#xff08;范式&#xff09;、保证数据一致性的事务机制、优化查询性能的索引、简化复杂查询的视图&#x…...

5步掌握缠论可视化:自动化你的技术分析工作流

5步掌握缠论可视化&#xff1a;自动化你的技术分析工作流 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 还在为手工分析复杂的缠论结构而烦恼吗&#xff1f;面对K线图上密密麻麻的价格波动&#xff0c;…...

【Docker WASM边缘部署终极指南】:20年架构师亲授3大避坑法则、4层架构图与实时性能调优参数

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker WASM边缘部署的演进逻辑与核心价值 WebAssembly&#xff08;WASM&#xff09;正从浏览器沙箱走向通用轻量运行时&#xff0c;而 Docker 官方对 WASM 的原生支持&#xff08;自 2023 年 Docker D…...

别再只会用top看CPU了!手把手教你用stress-ng在Linux上模拟真实业务压力

从玩具到武器&#xff1a;用stress-ng构建Linux压力测试的工业级方案 当我们需要验证服务器在高负载下的表现时&#xff0c;大多数人首先想到的是top命令——它确实能告诉我们CPU是否繁忙&#xff0c;但就像用体温计测量发动机温度一样&#xff0c;远远不够。真正的压力测试需要…...

如何高效解决OpenArk内核驱动加载问题:Windows安全分析最佳实践

如何高效解决OpenArk内核驱动加载问题&#xff1a;Windows安全分析最佳实践 【免费下载链接】OpenArk The Next Generation of Anti-Rookit(ARK) tool for Windows. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenArk 作为Windows平台新一代的反Rootkit工具&am…...

自回归模型生成图像检测技术D3QE解析

1. 项目概述 在计算机视觉领域&#xff0c;生成式AI技术的快速发展带来了前所未有的图像合成能力&#xff0c;同时也引发了关于数字内容真实性的新挑战。自回归&#xff08;Autoregressive, AR&#xff09;模型作为一种新兴的生成范式&#xff0c;通过离散化编码实现了高质量的…...