C++从入门到精通 C++11/14/17
---------------------------------------🤣 🤩 🤪 🧐 🤯 🥳 🤨 🥰 🤔 --------------------------------------------------
Author: XFFer_
会写程序就好了哪来那么多废话!!!
文章目录
Content
-
一、基本语言
-
01 语言特性、工程构成、可移植性
-
02 命名空间简介、基本输入输出精解
-
03 auto、头文件防卫、引用、常量
-
04 范围for、new内存动态分配、nullptr
-
05结构、权限修饰符、类简介
-
06 函数新特性、内联函数、const详解
-
07 string类型介绍
-
08 vector类型介绍
-
09 迭代器精彩演绎、失效分析及弥补、实战
-
10 类型转换:static_cast、reinterpret_cast等
-
-
二、类
-
01 成员函数、对象拷贝、私有成员
-
02 构造函数详解、explicit、初始化列表
-
03 inline、const、mutable、this、static
-
04 类内初始化、默认构造函数、=default;
-
05 拷贝构造函数
-
06 重载运算符、拷贝赋值运算符、析构函数
-
07 派生类、调用顺序、访问等级、函数遮蔽
-
08 基类指针、虚纯虚函数、多态性、虚析构
-
09 友元函数、友元类、友元成员函数
-
10 RTTI、dynamic_cast、typeid、虚函数表
-
11 基类与派生类关系的详细再探讨
-
12 左值、右值,左值引用、右值引用、move
-
13 临时对象深入探讨、解析,提高性能手段
-
14 对象移动、移动构造函数、移动赋值运算符
-
15 继承的构造函数、多重继承、虚继承
-
16 类型转换构造函数、运算符,类成员指针
-
-
三、模版与泛型
-
01 模版概念,函数模版定义、调用
-
02 类模版概念,类模版定义、使用
-
03 用typename场合、默认模版参数、趣味写法分析
-
04 成员函数模版,显式实例化、声明
-
05 using定义模版别名,显式制定模版参数
-
06 模版全特化、偏特化(局部特化)
-
07 可变参模版
-
08 可变参模版续、模版模版参数
-
-
四、智能指针
-
01 直接内存管理(new/delete)、创建新工程观察内存泄漏
-
02 new、delete探秘,智能指针概述、shared_ptr基础
-
03 shared_ptr常用操作、计数、自定义删除器等
-
04 weak_ptr概述、weak_ptr常用操作、尺寸
-
05 shared_ptr使用场景、陷阱、性能分析、使用建议
-
06 unique_ptr概述、常用操作
-
07 返回unique_ptr、删除器、尺寸、智能指针总结
-
-
五、并发与多线程
-
01 并发基本概念及实现,进程、线程基本概念
-
02 线程启动、结束,创建线程多法、join,detach
-
03 线程传参详解,detach()大坑,成员函数做线程函数
-
04 创建多个线程、数据共享问题分析、案例代码
-
05 互斥量概念、用法、死锁演示及解决详解
-
06 unique_lock详解
-
07 单例设计模式共享数据分析、解决,call_once
-
08 condition_variable、wait、notify_one、notify_all
-
09 async、future、packaged_task、promise
-
10 future其他成员函数、shared_future、atomic
-
11 std::atomic续谈、std::async深入谈
-
12 windows临界区、其他各种mutex互斥量
-
13 补充知识、线程池浅谈、数量谈、总结
-
-
六、内存高级话题
-
01 new、delete的进一步认识
-
02 new细节探秘、重载类内operator new、delete
-
03 内存池概念、代码实现和详细分析
-
04 嵌入式指针概念及范例、内存池改进版
-
05 重载全局new、delete,定位new及重载等
-
-
-
01 STL总述、发展史、组成、数据结构谈
-
02 容器分类、array、vector容器精解
-
03 容器的说明和简单应用例续
-
04 分配器概述、使用,工作原理
-
05 迭代器的概念和分类
-
06 算法概述、内部处理、使用范例
-
07 函数对象回顾、系统函数对象及范例
-
08 适配器概念、分类、范例及总结
-
-
八、未归类知识点
-
01 函数调用运算符、function类模版
-
02 万能引用universal reference
-
03 理解模版类型推断、查看类型推断结果
-
04 引用折叠,转发、完美转发,forward
-
05 理解auto类型推断,auto应用场合
-
06 详解decltype含义,decltype主要用途
-
07 可调用对象、std::function、std::bind
-
08 lambda表达式,for_each、find_if简介
-
09 lambda表达式捕获模式的陷阱分析和展示
-
10 可变参数函数、initializer_list、省略号形参
-
11 萃取(traits)技术概念、范例等
-
一、基本语言
01 语言特性、工程构成、可移植性
-
C语言 <==> C++
-
面向过程式的程序设计 <==> 基于对象/面向对象的程序设计
-
结构体 <==> 类
-
结构变量 <==> 对象
cstdio
是将stdio.h的内容用C++头文件的形式表示出来。
cstdio是标准C++(STL),且cstdio中的函数都是定义在一个名称空间std里面的,如果要调用这个名字空间的函数,必须得加std::或者在文件中声明using namespace std。
02 命名空间简介、基本输入输出精解
1 命名空间概念简介
2 基本输入输出cin、cout精解
命名空间概念简介
命名空间:是为了防止名字冲突而引入的一种机制。系统中可以定义多个命名空间,在不同命名空间内定义的函数,即便同名,也互不影响。
命名空间的定义
namespace 命名空间名
{
...
} //命名空间的定义可以不连续,可以写在一个解决方案的多个.cpp文件内
如何访问命名空间中的对象
命名空间名::实体名
using namespace 命名空间名;
::
叫做作用域运算符
基本输入输出cin、cout精解
iostream
库(输入输出流)
#include <iostream>
std::cout << "我又入坑了";
-
std::命名空间
,std是标准库命名空间 -
cout
(console output),控制台输出,“标准输出”对象 -
<<
:流插入运算符。“输出”运算符,在这里被重载,不是位运算的左移
std::cout << x << "的平方是" << x*x << "\n";
std::cout << x << "的平方是" << x*x << std::endl;
std::endl
是一个模版函数名,相当于函数指针,一般都位于std::cout
语句的末尾
作用:
-
输出换行符
\n
-
强制刷新输出缓冲区
std:cout << "请输入两个数字:" << std::endl;
int value1, value 2;
std::cin >> value1 >> value2
std::cout << value1 << "和" << value2 << "的和是:" << value1+value2 << std::endl;
-
cin
(console input),“标准输入”对象,可用来替代scanf -
>>
:流提取运算符。“输入”运算符 -
返回其左侧运算对象作为其计算结果
03 auto、头文件防卫、引用、常量
1 局部变量及初始化
2 auto
3 头文件防卫式声明
4 引用
5 常量
局部变量及初始化
随时用到随时定义
//C++中定义时初始化
int i {
0 }; //等同于int i = 0;
int a[] {
1, 2, 3};
auto:变量的自动类型推断
auto可以在变量声明的时候根据变量初始值的类型自动为此变量选择匹配的类型(声明时要初始化);auto自动类型推断发生在编译期间,不会造成程序效率降低。
auto value = true; //自动推断成bool
auto b {
3.5f }; //自动推断为浮点型
头文件防卫式声明
//head1.h
#ifndef __HEAD1__H__
#define __HEAD1__H__
//语句
#endif
避免在同一个文件内包含多次同一个头文件,因为在第二次#include
时,该标识符(常用文件名大写,如:__HEAD1__H__
)已被定义,#ifndef
判定False,则不会执行下面语句。
引用
int value {
10 };
int &refval = value;
为变量起了另外一个名字,一般用&符号标识。
常量
const
关键字和constexpr
关键字
const int var = 7;
constexpr int var2 = 8; //const和constexpr(C++11新标准)声明了该变量不改变