c++学习总结
0 数据类型(结构体,数组,vector,堆栈,队列,双头队列,映射map,哈希unordered_map,集合set):
结构体也能继承,也能封装函数。
向量(容器)vector:可以在尾部进行频繁增删,动态调整,内存连续的数据结构,但不适于中间增删。
map:有序键值对时间复杂度为 O(log n)
unordered_map:无序键值对(时间复杂度为 O(1)
set:存储唯一元素保证不重复且有序。
双头队列:可以再头和尾进行增加减少的高效结构
z:1 引用:相当于变量的第二标签。主要用于传参、函数返回值(只能返回全局变量、局部静态变量的引用)。
2虚函数与多态、纯虚函数:
虚函数:在基类中用virtual关键字修饰,定义默认行为;派生类中可以用override对该函数进行重写;调用时先定义基类指针或引用绑定到派生类上,这样调用的虚函数就实现了多态。核心就是基类中virtual中修饰定义;派生类中重写;基类指针或引用绑定到派生类上;
纯虚函数:没有实现函数体的虚函数(=0),要求必须在派生类中实现(常用于定义接口);含有纯虚函数的类称为抽象类,不能实例化,只能有派生类才能实例化(譬如动物类、形状类)。
3抽象数据类型ADT与数据抽象:
抽象将代码分离为接口和实现,加上数据访问属性(public/protect/private)就可以只对外暴露必要的接口隐藏实现细节。好处是1 私有只与实现实现有关便于查找分析问题,公有涉及所有派生;2防止派生非正常访问使用成员造成问题;3 如果底层实现改变,只改变私有实现,公有接口保持不变。
类是对函数(方法)和数据的封装,需要隐藏的隐藏,需要暴露的提供有限访问(private只能类成员内部访问,protect只有类成员以及派生对象访问,public都可访问),默认都是私有的,除非显示private/protect修饰。
接口设计:接口是抽象类(至少包含一个纯虚函数)留给派生类可以继承的一个基类,因不能实例化对象,必须由派生实现即抽象类给派生类留的灵活接口。
4 命名空间:
是为了解决不同模块或库中的同名变量和函数在编译时编译器懵逼的情况。明明空间可以嵌套,用namespace user_space{}进行定义,用using namespace user_space进行调用。
5 模版:
模版是泛型编程的基础(忽略数据类型的通用方法),有函数模版和类模版之分。
6异常:
throw:抛出异常;try{//保护性代码}catch(..){当异常发送时捕捉和处理异常}。
7 信号:
信号是由操作系统传给进程的中断,注册信号用 signal(registered signal, signal handler) ;软件模拟生成信号用int raise (signal sig);
8 多线程
C++ 11 之后添加了新的标准线程库 std::thread,可以进行线程的创建,同步(std::future 和 std::promise:实现线程间的值传递)和互斥(互斥量mutex/lock/条件变量Condition/局部存储thread_local/原子操作Atomic),
join() 用于等待线程完成执行。如果不调用 join() 或 detach() 而直接销毁线程对象,会导致程序崩溃。
detach():将线程与主线程分离,线程在后台独立运行,主线程不再等待它
9 web编程:C++也可以进行web的编程。
浙公网安备 33010602011771号