C++核心知识点总结
学习一门新的程序设计语言得到最好方法就是练习编写程序!
C++基础
变量和基本类型
基本内置类型
定义 | 解释 |
算术类型 | 整型:包括字符和布尔类型,bool、char、wchar_t、char16_t、char32_t、short、int、long、long long、 浮点型:float、double、long double |
类型转换 | 类型所能表示的值的范围决定了转换的过程; |
字面值常量 | 整型:20 浮点型:3.14159 字符:'a' 字符串:"Hello World" 转义序列:/n |
变量
变量定义基本形式:首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。
int sum, value;
初始化:当对象在创建时获得了一个特定的值,就说这个对象被初始化了。初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
double price = 109.99;
列表初始化:用花括号来初始化变量的形式被称为列表初始化。
int units_sold = 0;
int units_sold = {0};
int units_sold(0);
int units_sold{0};
标识符:由字母、数字和下划线组成,其中必须以字母或下划线开头;标识符长度没有限制,但对大小写字母敏感。
int somename, someName, SomeName, SOMENAME;//定义了4个不同的int 变量
作用域:是程序的一部分,在其中名字有其特定的含义,C++语言中大多数作用域都以花括号分隔;同一个名字在不同的作用域可能指向不同的实体;名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。主要分成全局作用域和块作用域。
复合类型
复合类型:指基于其他类型定义的类型,主要有引用和指针。
引用(reference):为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是申明的变量名。
引用必须初始化;
引用即别名;
int ival = 1024;
int &refVal = ival;
int &refVal2; //报错:引用必须被初始化
允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号&开头。
int i = 1024, i2 = 2048; //i和i2都是int
int &r = i, r2 = i2;//r是一个引用,与i绑定在一起,r2是int
int i3 = 1024, &ri= i3; //i3是int, ri是一个引用,与i3绑定在一起
int &r3 = i3, &r4 = i2; //r3和r4都是引用
指针(pointer):是“指向(point to)”另外一种类型的复合类型,与引用类似,指针也实现了对其他对象的间接访问;指针与引用相比有很多的不同点,其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内他可以先后指向几个不同的对象;其二,指针无须在定义时赋初值。
和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。
定义指针类型的方法将声明符写成*d的形式,其中d是变量名,如果在一条语句中定义了几个指针的变量,每个变量前面都必须有符号*。
int *ip1, *ip2;//ip1和ip2都是指向int型对象得到指针
double dp, *dp2; //dp2是指向double型对象的指针,dp是double型对象
获取对象的地址:指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&)。
double dval;
double *pd = &dval; //初始值是double型对象的地址
double *pd2 = pd; //初始值是指向double对象的指针
空指针(null pointer): 不指向任何对象,在试图使用一个指针之前代码可以首先检查它是否为空。
建议初始化所有指针。
int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL; //需要首先#include cstdlib
void*指针:是一种特殊的指针类型,可用于存放任意对象的地址,一个void*指针存放着一个地址,这一点和其他指针类似;不同的是,对该地址中到底是个申明类型的对象并不了解。
指向指针的指针:指针是内存中的对象,像其他对象一样也有自己的地址,因此允许把指针的地址再存放到另一个指针当中。
int ival = 1024;
int *pi = &ival;//pi指向一个int型的数
int **ppi = π//ppi指向一个int型的指针
指向指针的引用:引用本身不是一个对象,因此不能定义指向引用的指针;但指针是对象,所以存在对指针的引用。
int i = 42;
int *p;//p是一个int型指针
int *&r = p;//r是一个对指针p的引用
【=========================================待更新=============2023.7.30========================】
const限定符
处理类型
自定义数据结构
字符串、向量和数组
- 命名空间的using声明
- 标准库类型string
- 标准库类型vector
- 迭代器介绍
- 数组
- 多维数组
表达式
- 基础
- 算术运算符
- 逻辑与关系运算符
- 赋值运算符
- 递增和递减运算符
- 成员访问运算符
- 条件运算符
- 位运算符
- sizeof运算符
- 逗号运算符
- 类型转换
- 运算符优先级表
语句
- 简单语句
- 语句作用域
- 条件语句
- 迭代语句
- 跳转语句
- try语句块和异常处理
函数
- 函数基础
- 参数传递
- 返回类型和return语句
- 函数重载
- 特殊用途特性
- 函数匹配
- 函数指针
类
- 定义冲向数据类型
- 访问控制与封装
- 类的其他特性
- 类的作用域
- 构造函数再探
- 类的静态成员
C++标准库
IO库
- IO类
- 文件输入输出
- string流
顺序容器
- 顺序容器概览
- 顺序容器操作
- vector对象是如何增加的
- 额外的string操作
- 容器适配器
泛型算法
- 初识泛型算法
- 定制操作
- 再探迭代器
- 泛型算法结构
- 特定容器算法
关联容器
- 关联容器概述
- 关联容器操作
- 无序容器
动态内存
- 动态内存与智能指针
- 动态数组
- 使用标准库:文本查询程序
C++类设计者工具
拷贝控制
- 拷贝、赋值与销毁
- 拷贝控制和资源管理
- 交换操作
- 拷贝控制示例
- 动态内存管理类
- 对象移动
重载运算与类型转换
- 输入和输出运算符
- 算术和关系运算符
- 赋值运算符
- 下标运算符
- 递增和递减运算符
- 成员访问运算符
- 函数调用运算符
- 重载、类型转换与运算符
面向对象程序设计
- OOP概述
- 定义基类和派生类
- 虚函数
- 抽象基类
- 访问控制与继承
- 继承中的类作用域
- 容器与继承
- 文本查询程序再探
模板与泛型编程
- 定义模板
- 模板实参推断
- 重载与模板
- 可变参数模板
- 模板特例化
C++高级主题
标准库特殊设施
- tuple类型
- bitset类型
- 正则表达式
- 随机数
- IO库再探
用于大型程序的工具
- 异常处理
- 命名空间
- 多重继承与虚继承
特殊工具与技术
- 控制内存分配
- 运行时类型识别
- 枚举类型
- 类成员指针
- 嵌套类
- union
- 局部类
- 固有的不可移植的特性
C++11的新特性
特性 | 解释 |
long long 类型 | |
列表初始化 | |
nullptr常量 |
参考
C++ Primer(第5版).
相关文章:
C++核心知识点总结
学习一门新的程序设计语言得到最好方法就是练习编写程序! C基础 变量和基本类型 基本内置类型 定义解释 算术类型 整型:包括字符和布尔类型,bool、char、wchar_t、char16_t、char32_t、short、int、long、long long、 浮点型:…...

echart折线图,调节折线点和y轴的间距(亲测可用)
options代码: options {tooltip: {trigger: axis, //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。},xAxis: {type: category,//类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。…...

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)
ODBC数据源 一些小众的数据源无法直接连接,需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序,Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…...

redis 淘汰策略和持久化
文章目录 一、淘汰策略1.1 背景1.2 淘汰策略 二、持久化2.1 AOF日志2.1.1 AOF配置2.1.2 AOF策略2.1.3 AOF缺点2.1.4 AOF Rewrite2.1.5 AOF Rewrite配置2.1.6 AOF Rewrite缺点2.1.7 fork进程时的写时复制2.1.8 大key对持久化的影响 2.2 RDB快照2.2.1 RDB配置2.2.2 RDB缺点 2.3 混…...

Redis学习路线(6)—— Redis的分布式锁
一、分布式锁的模型 (一)悲观锁: 认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。例如Synchronized、Lock都属于悲观锁。 优点: 简单粗暴缺点: 性能略低 &#x…...

一、创建自己的docker python容器环境;支持新增python包并更新容器;离线打包、加载image
1、创建自己的docker python容器环境 参考:https://blog.csdn.net/weixin_42357472/article/details/118991485 首先写Dockfile,注意不要有txt等后缀 Dockfile # 使用 Python 3.9 镜像作为基础 FROM python:3.9# 设置工作目录 WORKDIR /app# 复制当前…...

【Git】git企业开发命令整理,以及注意点
1.git企业开发过程 业务的分支大概有以下几个: master:代码随时可能上线 develop:代码最新 feature/xxx:实际业务开发分支 release/xxx:预发布分支 fix:修复bug分支 过程大概是这样的: 首…...

使用Django自带的后台管理系统进行数据库管理的实例
Django自带的后台管理系统主要用来对数据库进行操作和管理。它是Django框架的一个强大功能,可以让你快速创建一个管理界面,用于管理你的应用程序的数据模型。 使用Django后台管理系统,你可以轻松地进行以下操作: 数据库管理&…...
leetcode解题思路分析(一百四十五)1254 - 1266 题
统计封闭岛屿的数目 二维矩阵 grid 由 0 (土地)和 1 (水)组成。岛是由最大的4个方向连通的 0 组成的群,封闭岛是一个 完全 由1包围(左、上、右、下)的岛。请返回 封闭岛屿 的数目。 BFS或者DFS…...
使用 GORM 连接数据库并实现增删改查操作
步骤 1:安装 GORM 首先,我们需要安装 GORM 包。在终端中运行以下命令: shell go get -u gorm.io/gorm 步骤 2:导入所需的包 在 Go 代码的开头导入以下包: import ("gorm.io/driver/mysql" // 如果你使用…...

kafka集群搭建(Linux环境)
zookeeper搭建,可以搭建集群,也可以单机(本地学习,没必要搭建zookeeper集群,单机完全够用了,主要学习的是kafka) 1. 首先官网下载zookeeper:Apache ZooKeeper 2. 下载好之后上传到…...

树莓派本地快速搭建web服务器,并发布公网访问
文章目录 树莓派本地快速搭建web服务器,并发布公网访问 树莓派本地快速搭建web服务器,并发布公网访问 随着科技的发展,电子工业也在不断进步,我们身边的电子设备也在朝着小型化和多功能化演进,以往体积庞大的电脑也在…...

集合中的数据结构
栈 先进后出入口跟出口在同一侧 队列 先进先出入口跟出口在不同的一层 数组 查询快、增删慢查询快是因为数组的地址是连续的,我们通过数组的首地址就可以找到数组,之后通过数组的下标就可以访问数组的每一个元素。增删慢是因为数组的长度是固定的&…...

CentOS 8 错误: Error setting up base repository
配置ip、掩码、网关、DNS VMware网关可通过如下查看 打开网络连接 配置镜像的地址 vault.centos.org/8.5.2111/BaseOS/x86_64/os/...
java外观模式
在Java中,外观模式(Facade Design Pattern)用于为复杂的子系统提供一个简单的接口,以方便客户端的使用。外观模式是一种结构型设计模式,它隐藏了系统的复杂性,将多个类的复杂操作封装在一个外观类中&#x…...

3秒快速打开 jupyter notebook
利用 bat 脚本,实现一键打开 minconda 特点: 1、可指定 python 环境 2、可指定 jupyter 目录 一、配置环境 minconda 可以搭建不同的 python 环境,所以我们需要找到 minconda 安装目录,把对应目录添加到电脑环境 PATH 中&#…...

数据安全
数据的备份与恢复 1. 数据备份技术 任何数据在长期使用过程中,都存在一定的安全隐患。由于认为操作失误或系统故障,例如认为错误、程序出错、计算机失效、灾难和偷窃,经常造成数据丢失,给个人和企业造成灾难性的影响。在这种情况…...

华为nat64配置
1.前期环境准备 环境拓扑 拓扑分为两个区域,左边为trust区域,使用IPv4地址互访,右边为untrust区域,使用IPv6地址互访 2.接口地址配置 pc1地址配置 pc2地址配置 FW接口配置 (1)首先进入防火墙配置界面 注:防火墙初始账号密码为user:admin,pwd:Admin@123,进入之后…...

从分片传输到并行传输之大文件传输加速技术
随着大文件的传输需求越来越多,传输过程中也会遇到很多困难,比如传输速度慢、文件安全性低等。为了克服这些困难,探讨各种大文件传输加速技术。其中,分片传输和并行传输是两种比较常见的技术,下面将对它们进行详细说明…...

mybatisPlus入门篇
文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...