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*指针存放着一个地址,这一点和其他指针类似;不同的是,对该地址中到底是个申明类型的对象并不了解。

void*指针能做的事情比较有限:拿它和别的指针比较、作为函数的输入或输出、或赋给另外一个void*指针;不能直接操作void*指针所指向的对象。

double obj = 3.14, *pd = &obj;
void *pv = &obj;
pv = pd;

指向指针的指针

指针是内存中的对象,像其他对象一样也有自己的地址,因此允许把指针的地址再存放到另一个指针当中。

int ival = 1024;
int *pi = &ival;//pi指向一个int型的数
int **ppi = π//ppi指向一个int型的指针

指向指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针;但指针是对象,所以存在对指针的引用。

int i = 42;
int *p;//p是一个int型指针
int *&r = p;//r是一个对指针p的引用

const限定符

来由:希望定义这样一种变量,它的值不能被改变,所以可以用关键字const对变量的类型加以限定。

const int bufsize = 512;

任何试图为bufsize赋值的行为都将引发错误,因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化

const int i = get_size();
const int j = 42;
const int k;//错误,k是一个未经过初始化的常量

 初始化和const

只能在const类型的对象上执行不改变其内容的操作;

默认状态下,const对象仅在文件内有效,解决办法就是对于const变量不管是声明还是定义都添加extern关键字。

const引用

把引用绑定到const对象上,称之为对常量的引用。

const int ci = 1024;
const int &ri = ci;//正确,引用及其对应的对象都是常量
r1 = 42; //错误,r1是对常量的引用
int &r2 = ci; //错误,试图让一个非常量引用指向一个常量对象

【=========================================待更新=============2023.7.31========================】

处理类型

自定义数据结构

字符串、向量和数组

  1. 命名空间的using声明
  2. 标准库类型string
  3. 标准库类型vector
  4. 迭代器介绍
  5. 数组
  6. 多维数组

表达式

  1. 基础
  2. 算术运算符
  3. 逻辑与关系运算符
  4. 赋值运算符
  5. 递增和递减运算符
  6. 成员访问运算符
  7. 条件运算符
  8. 位运算符
  9. sizeof运算符
  10. 逗号运算符
  11. 类型转换
  12. 运算符优先级表

语句

  1. 简单语句
  2. 语句作用域
  3. 条件语句
  4. 迭代语句
  5. 跳转语句
  6. try语句块和异常处理

函数

  1. 函数基础
  2. 参数传递
  3. 返回类型和return语句
  4. 函数重载
  5. 特殊用途特性
  6. 函数匹配
  7. 函数指针

  1. 定义冲向数据类型
  2. 访问控制与封装
  3. 类的其他特性
  4. 类的作用域
  5. 构造函数再探
  6. 类的静态成员

C++标准库

IO库

  1. IO类
  2. 文件输入输出
  3. string流

顺序容器

  1. 顺序容器概览
  2. 顺序容器操作
  3. vector对象是如何增加的
  4. 额外的string操作
  5. 容器适配器

泛型算法

  1. 初识泛型算法
  2. 定制操作
  3. 再探迭代器
  4. 泛型算法结构
  5. 特定容器算法

关联容器

  1. 关联容器概述
  2. 关联容器操作
  3. 无序容器

动态内存

  1. 动态内存与智能指针
  2. 动态数组
  3. 使用标准库:文本查询程序

C++类设计者工具

拷贝控制

  1. 拷贝、赋值与销毁
  2. 拷贝控制和资源管理
  3. 交换操作
  4. 拷贝控制示例
  5. 动态内存管理类
  6. 对象移动

重载运算与类型转换

  1. 输入和输出运算符
  2. 算术和关系运算符
  3. 赋值运算符
  4. 下标运算符
  5. 递增和递减运算符
  6. 成员访问运算符
  7. 函数调用运算符
  8. 重载、类型转换与运算符

面向对象程序设计

  1. OOP概述
  2. 定义基类和派生类
  3. 虚函数
  4. 抽象基类
  5. 访问控制与继承
  6. 继承中的类作用域
  7. 容器与继承
  8. 文本查询程序再探

模板与泛型编程

  1. 定义模板
  2. 模板实参推断
  3. 重载与模板
  4. 可变参数模板
  5. 模板特例化

C++高级主题

标准库特殊设施

  1. tuple类型
  2. bitset类型
  3. 正则表达式
  4. 随机数
  5. IO库再探

用于大型程序的工具

  1. 异常处理
  2. 命名空间
  3. 多重继承与虚继承

特殊工具与技术

  1. 控制内存分配
  2. 运行时类型识别
  3. 枚举类型
  4. 类成员指针
  5. 嵌套类
  6. union
  7. 局部类
  8. 固有的不可移植的特性

C++11的新特性

特性 解释
long long 类型
列表初始化
nullptr常量

参考

C++ Primer(第5版).

你可能感兴趣的:(C++,c++,开发语言,算法,数据结构)