平台网站建设教程/网址提交入口
前言
后天考c++,但这几天得甲流了,特别难受!复习c++的时候复习着忘着,所以用csdn记录一下不熟悉的知识点,等后天考前再看一遍!
函数模板
#include <iostream>// 定义一个模板类
template <class T1, typename T2>
class Pair {
private:T1 first;T2 second;public:// 构造函数Pair(T1 f, T2 s) : first(f), second(s) {}// 获取第一个元素T1 getFirst() const {return first;}// 获取第二个元素T2 getSecond() const {return second;}
};int main() {// 使用模板类 Pair,其中 T1 为 int,T2 为 doublePair<int, double> myPair(1, 3.14);// 输出结果std::cout << "First: " << myPair.getFirst() << std::endl;std::cout << "Second: " << myPair.getSecond() << std::endl;return 0;
}
T:类型参数,实际上是一个虚拟的类型名;
class 和typename的作用相同,都表示“类型名”,可互换
引用
格式: <类型> &<引用变量名> = <原变量名>;
其中原变量名是定义好的变量
不能建立引用的引用,也没有引用的指针
引用的用途主要是用来作函数的参数或函数的返回值
类和结构体类型的异同
用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public
而用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变
如果希望成员是公用的,使用struct比较方便,如果希望部分成员是私有的,宜用class
建议尽量使用class来建立类,写出完全体现C++风格的程序
成员函数的存储方式
每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间
不同的对象使用的是同一个函数代码段,它怎么能够分别对不同对象中的数据进行操作呢?
C++为此专门设立了一个名为this的指针,用来指向不同的对象
应当说明: 常说的“某某对象的成员函数”,是从逻辑的角度而言的,而成员函数的存储方式,是从物理的角度而言的,二者是不矛盾的
构造函数
如果用户未定义构造函数,系统会自动提供一个默认构造函数,但函数体是空的,不提供初始化作用
如果用户仅仅写了一个有参构造函数,那么上述这个默认构造函数就会“消失”,比如:
构造函数也可以由默认值,应该在声明构造函数时指定
声明构造函数时,形参名可以省略,Box(int = 10,int = 10,int = 10)
构造函数带默认值时很容易和重载的构造函数产生歧义性,比如
Box();
Box(int = 10,int = 10,int = 10);
析构函数
析构函数不能被重载;一个类可以有多个构造函数,只能有一个析构函数
static局部对象,只在main函数结束或调用exit函数结束程序时调用析构函数
全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时调用析构函数
对于静态局部对象,只在程序第一次调用此函数建立对象时调用构造函数一次,在调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用析构函数
常对象
定义常对象的形式为:
类名 const 对象名[(实参表列)];
或
const 类名 对象名[(实参表列)];
常对象必须要有初值,所有成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可声明为常对象
如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)
引用常对象中的函数成员,只需将该成员函数声明为const即可。如
void get_time( ) const; //将函数声明为const
t1.get_time( ); // 可行
修改常对象中的某个数据成员的值,需要对该数据成员声明为mutable,如
mutable int count;//可以用声明为const的成员函数来修改它的值
常数据成员
和一般常变量相似,常数据成员的值是不能改变
只能通过构造函数的参数初始化表对常数据成员进行初始化。不能在构造函数中对常数据成员赋初值的方法。
Time∷Time(int h){hour=h} //非法
Time∷Time(int h):hour(h){} //通过参数初始化表对常数据成员初始化
常对象的数据成员都是常数据成员,因此常对象的构造函数只能用参数初始化表对常数据成员进行初始化
常成员函数
如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们,例如只用于输出数据等
常成员函数可以引用const数据成员,也可以引用非const的数据成员
const数据成员可以被const成员函数引用,也可以被非const的成员函数引用
如果已定义了一个常对象,只能调用其中的const成员函数,而不能调用非const成员函数
常对象只保证其数据成员是常数据成员,其值不被修改
常成员函数不能调用另一个非const成员函数
静态成员
如果想在同类的多个对象之间实现数据共享,也不要用全局对象,可以用静态的数据成员
静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中定义了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用
静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放(一般数据成员是在对象建立时分配空间,在对象撤销时释放)。静态数据成员是在程序编译时被分配空间的,到程序结束时才释放空间
静态数据成员可以初始化,但只能在类体外进行初始化。
一般形式为
数据类型类名∷静态数据成员名=初值;
int Box∷height=10;
注意: 不能用参数初始化表对静态数据成员初始化
如果未对静态数据成员赋初值,编译系统会自动赋予初值0
静态成员函数没有this指针,在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员
在一个静态成员函数中:
cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法
cout<<width<<endl; //若width是非静态数据成员,不合法
如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如: cout<<a.width<<endl; //引用本类对象a中的非静态成员
假设a已定义为Box类对象,且在当前作用域内有效,则此语句合法
运算符重载
C++不允许用户自己定义新的运算符,只能对已有的运算符进行重载。
C++中绝大部分的运算符允许重载。不能重载的运算符只有5个:
. (成员访问运算符)
* (成员指针访问运算符)
∷ (域运算符)
sizeof (长度运算符)
?: (条件运算符)
重载不能改变运算符运算对象(即操作数)的个数。
重载不能改变运算符的优先级别。
重载不能改变运算符的结合性
重载运算符的函数不能有默认参数,否则就改变了运算符参数的个数。
重载的运算符必须和用户定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。
用于类对象的运算符一般必须重载,但运算符“=”和“&”不必用户重载
自增运算符重载示例:
#include <iostream>class Counter {
private:int count;public:Counter() : count(0) {}// 重载前置自增运算符 (++var)Counter& operator++() {count++;return *this; // 返回递增后的对象引用}// 重载后置自增运算符 (var++)Counter operator++(int) {Counter temp(*this); // 创建一个副本用于保存递增前的值count++;return temp; // 返回递增前的对象副本}void display() const {std::cout << "Count: " << count << std::endl;}
};int main() {Counter myCounter;// 使用前置自增运算符++myCounter;myCounter.display();// 使用后置自增运算符Counter anotherCounter = myCounter++;myCounter.display();anotherCounter.display();return 0;
}
剩下的内容,在下面三篇文章中写的比较详细:
c++ 运算符重载
c++ 继承和派生
c++ 多态和虚函数
相关文章:

C++ 考前难点总结
前言 后天考c,但这几天得甲流了,特别难受!复习c的时候复习着忘着,所以用csdn记录一下不熟悉的知识点,等后天考前再看一遍! 函数模板 #include <iostream>// 定义一个模板类 template <class T1…...

ARM 汇编语言知识积累
博文参考: arm中SP,LR,PC寄存器以及其它所有寄存器以及处理器运行模式介绍 arm平台根据栈进行backtrace的方法-腾讯云开发者社区-腾讯云 (tencent.com) 特殊功能寄存器: SP: 即 R13,栈指针,…...

k8s面试之——简述网络模型
kubernetes网络模型是kubernetes集群中管理容器网络通信的一种机制,用于实现pod间、pod与外部网络间的通信和互联,并提供了多种网络插件和配置选项来满足不同应用场景下的需求。kubernetes网络模型可以分为一下几个部分: 1. pod网络模型 在…...

C语言中关于if else的理解
if else我们可以理解为 if(条件1) //如果条件1成立 语句1; //执行语句1 else //如果条件1不成立 语句2; //执行语句2 这是一个经典的if els…...

Keil5软件仿真 定时器互补通道 波形输出(Logic Analyzer)
步骤一:管脚配置确认。 ①配置定时器的管脚模式为复用推挽输出模式(GPIO_MODE_AF_PP)!!!,注意:复用开漏模式软件仿真时无波形。 步骤二:编译程序。 ①点击编译按钮。 …...

华纳云:怎么实现Linux主机ssh无密码登录
实现Linux主机之间的SSH无密码登录可以通过使用SSH密钥对。以下是简单的步骤: 步骤 1: 生成SSH密钥对 打开终端,并在本地计算机上执行以下命令: ssh-keygen -t rsa 此命令将生成一对SSH密钥(公钥和私钥)。您可以选择在生成密钥时设置密码&…...

模型树实操
很多时候,数据都是有层级和分类的,使用laravel的Dcat框架,可以快速搭建一个结构清晰、且可以鼠标拖拽排序的后台;先上例子更直观: 这里是Dcat的模型树使用文档,戳一下; 重点注意事项有&#x…...

html table+css实现可编辑表格
要实现可编辑的 HTML 表格,你可以使用 JavaScript 和 HTML5 的 contenteditable 属性。 <!DOCTYPE html> <html> <head><style>table {border-collapse: collapse;width: 100%;}th, td {border: 1px solid black;padding: 8px;text-align:…...

c语言:计算1+2+3……+n的和|练习题
一、题目 输入一个数n,计算123……n的和 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int num0; printf("请输入要运算的数:"); scanf("%d",&num); sumResult(num);//相加结果函数 } //计算打印…...

Yolov5水果分类识别+pyqt交互式界面
Yolov5 Fruits Detector Yolov5 是一种先进的目标检测算法,可以应用于水果分类识别任务。结合 PyQT 框架,可以创建一个交互式界面,使用户能够方便地上传图片并获取水果分类结果。以下将详细阐述 Yolov5 水果分类识别和 PyQT 交互式界面的实现…...

正式环境和sandbox中的RecordTypeId不一样应该怎么办
如果在 Salesforce 正式环境和 Sandbox 中,RecordTypeId 不一样,通常需要在代码或配置中进行适配,以确保代码在不同环境中的兼容性。以下是一些常见的方法: 使用自定义设置或自定义标签: 创建自定义设置或自定义标签来…...

7种常见的网络安全设备及其功能
网络安全设备在现代网络环境中起着至关重要的作用,帮助保护个人和组织免受恶意攻击。本文将介绍7种常见的网络安全设备,包括防火墙、入侵检测系统、反病毒软件、数据加密设备、虚拟私人网络、安全信息和事件管理系统以及网络访问控制设备,并详…...

vue3实现pinia仓库状态持久化
使用 pinia-plugin-persistedstate 实现pinia仓库状态持久化 安装 pnpm i pinia-plugin-persistedstate # or npm i pinia-plugin-persistedstate # or yarn add pinia-plugin-persistedstatemain.ts引入 import persist from pinia-plugin-persistedstate const app creat…...

Node.js(三)-模块的加载机制
1. 优先从缓存中加载 模块在第一次加载后会被缓存,这就意味着多次调用require()不会导致模块的代码被执行多次。 注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率. 2. 内置模块的加…...

函数
1、概述 1.1、函数分类 1)系统函数(库函数) 2)用户定义函数 1.2、函数的作用 降低代码重复率让程序更加模块化,利于阅读、修改和完善 1.3、函数的调用:随机数 函数调用 5 要素: 头文件&…...

第四周:机器学习知识点回顾
前言: 讲真,复习这块我是比较头大的,之前的线代、高数、概率论、西瓜书、樱花书、NG的系列课程、李宏毅李沐等等等等…那可是花了三年学习佳实践下来的,现在一想脑子里就剩下几个名词就觉得废柴一个了,朋友们有没有同感…...

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理
专题介绍 该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。 相关资料 官方论坛: https://www.lomcn.org/fo…...

python编程(2)之灯光秀的按钮
今天小编带领大家开始学习python编程的第二节,灯关秀的按钮。 按键在后续的学习和开发过程中,都是很重要的内容,是帮助我们获取外界信息的基础通道,识别按键的方式,在上节的内容给大家介绍了,大家可以进行学…...

pandas将dataframe列中的list转换为多列
在应用机器学习的过程中,很大一部分工作都是在做数据的处理,一个非常常见的场景就是将一个list序列的特征数据拆成多个单独的特征数据。 比如数据集如下所示: data [[John, 25, Male,[99,100,98]],[Emily, 22, Female,[97,99,98]],[Michae…...

小巧的Windows Memory Cleaner内存清理工具-释放内存,提升电脑的性能-供大家学习研究参考
软件介绍 Windows Memory Cleaner是一款非常不错的内存清理工具大小仅200KB,这款免费的 RAM 清理器使用本机 Windows 功能来清理内存区域,帮助用户释放内存,提升电脑的性能,有时程序不会释放分配的内存,从而使计算机变…...

STM32F072 CAN and USB
1 通用描述 1.1 STM8 MOSTek 6502 -> ST7 -> STM8 STM8型号单片机分为STM8A、STM8L、STM8S三个系列。 STM8A:汽车级应用 STM8L:超低功耗MCU STM8S:标准系列 1.2 STM32 - F1系列用的最多,最大工作频率72MHz - STM32固件库&am…...

卷积神经网络基础与补充
参考自 up主的b站链接:霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 https://blog.csdn.net/m0_37867091?typeblog CNN的历史发展: 这一点老师上课的时候也有讲到,BP的出现对CNN的发展至关重要 卷积的特性&#x…...

File Inclusion(Pikachu)
File Inclusion(local) 这里随便点击一个提交 观察url,显示是一个文件file1.php 可以直接通过url修改这个文件 找到自己的文件(本地文件)shell.php的路径写上去 就可以看到 File Inclusion(remote) 提交的是一个目标…...

【Redis刨析】知识图谱的构建与实现
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言引用构建过程Redis的知识图谱构建过程Redis介绍快的原因持久化 引用 对于编程的学习,过了初级阶段,我认为应该减少对视频的依赖&am…...

html学习笔记 标题、段落、换行、列表、超链接、图片、表格
<h1></h1> <p></p> <br>换行,不带线 <hr>换行,带线列表 类似↓ 2 1 无序列表 <ul><li></li><li></li><li></li> </ul>有序列表 <oi><li></l…...

汽车项目管理
项目节点: MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…...

Tg-5511cb: tcxo高稳定性+105℃高温
爱普生推的一款TG-5511CB是一种高稳定的TCXO温补晶体振荡器,频率范围十分广泛从 10mhz ~ 54mhz,它的电源电压只需要3.3V,无论是手机还是其他电子设备,都能轻松提供稳定的电力支持。频率/温度特性表现出色,0.28 10^6Ma…...

Linux 命令 ifconfig 全面解析!
ifconfig 是 network interfaces configuring 的缩写。 在 Linux 操作系统中,ifconfig 用于显示或配置网络设备的参数信息。 查看网卡信息 $ ifconfig # 显示激活状态(up 状态)的网卡信息 eth0 Link encap:Ethernet HWaddr 00:0c:29:75:8…...

00-Git 应用
Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具,也称之为代码版本控制工具,代码版本控制或管理的工具用的最多的: svn、 git。 SVN 是采用的 同步机制,即本地的代码版本和服务器的版本保持一致(提…...

安全运维是做什么的,主要工作内容是什么
安全运维,简称SecOps,是一种集成安全措施和流程到信息技术运维的实践。它的目的是确保在日常运维活动中,如网络管理、系统维护、软件更新等,均考虑并融入安全策略。安全运维的核心是实现安全和运维团队的密切协作,以快…...