C++ 考前难点总结
前言
后天考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 功能来清理内存区域,帮助用户释放内存,提升电脑的性能,有时程序不会释放分配的内存,从而使计算机变…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...
