C++复习
文章平均质量分 92
veneno_one
秉心塞渊,朝着“无他,惟手熟尔”的境界
展开
-
C++:STL
STL一、STL-容器(容器的简单使用,底层实现,适用场景)1> vector2> list3> deque4> set/multiset5> map/multimap6> stack,queue/priority_equal二、STL-函数对象1> 一元函数对象2> 二元函数对象(less、less_equal、greater、greater_equal)三、迭代器1> iterator2> const_iterator3> reverse原创 2021-06-15 15:53:43 · 344 阅读 · 0 评论 -
C++:智能指针
智能指针auto_ptrunique_ptrshared_ptrweak_ptrscoped_ptr auto_ptr auto_ptr是C++标准库中为了解决资源泄露的问题提供的一个智能指针模板,是一种简单的智能指针 功能:动态分配对象以及当对象不再需要时自动执行清理 实现原理:在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来和普通指针类似,但由于其构造函数声明为explicit,因此不能通过隐式转换来构造,只能显示调用构造函数 auto_ptr<string>原创 2021-06-09 18:41:55 · 160 阅读 · 0 评论 -
C++:继承与多态
继承与多态一、继承的思想二、虚函数,多态的思想三、纯虚函数和抽象类四、虚继承 一、继承的思想 二、虚函数,多态的思想 三、纯虚函数和抽象类 四、虚继承原创 2021-06-06 18:40:47 · 229 阅读 · 0 评论 -
C++:运算符重载
运算符重载形象概念1.浅拷贝2.深拷贝3.写时拷贝4.内存池的设计及其思想new和delete的使用new的两个缺点默认内存管理函数的不足内存池的定义内存池优点内存池的分类内存池设计内存池代码实现 形象概念 拷贝构造函数默认的是浅拷贝。当不涉及到堆内存时用浅拷贝完全可以,否则就需要深拷贝了。 浅拷贝相当于一个箱子有多个钥匙,但其中一个人打开箱子取走箱子里的东西时,其他人是不知道的。 深拷贝是有多个箱子每个箱子对应一个钥匙,但一个人取走他的钥匙对应的箱子里的东西时,不会对其他人产生影响。 1.浅拷贝 位拷贝,原创 2021-06-01 17:00:13 · 43392 阅读 · 3 评论 -
C++:类和对象
类和对象一、面向对象的思想二、封装的思想三、const的用法四、static的用法1、static修饰变量2、static修饰函数五、类中的几个默认的函数及其特点1、构造函数2、析构函数3、拷贝构造函数4、赋值运算符的重载函数 一、面向对象的思想 &esmp;&esmp;面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。 系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联原创 2021-05-31 21:13:02 · 513 阅读 · 1 评论 -
C/C++的区别
C/C++的区别1、new 和 malloc 的区别2、函数重载(重定义),C++函数符号的生成规则函数重载C++函数符号的生成规则3、引用与指针的区别4、inline 函数的特点,与宏,普通函数,static 修饰的函数的区别inline函数的特点inline函数与普通函数、宏、static修饰的函数的区别5、C/C++的相互调用1、导出C函数以用于C或C++的项目2、导出 C++ 函数以用于C语言项目3、C++调用C库4、C调用C++库 1、new 和 malloc 的区别 malloc与free是原创 2021-05-30 18:01:06 · 488 阅读 · 1 评论 -
C++:虚拟地址空间布局
对于每一个进程都会对应一个虚拟地址空间,对于32位的操作系统(其指令的位数最大为32位,因此地址码最多32位),虚拟地址空间的大小为2^{32}B即0~4GB的虚拟地址空间,其中内核空间为1GB,64位操作系统同理。 由于每个进程都不能直接访问内核空间,而是通过系统调用间接进入内核,因此,所有的进程都共享内核空间。而每个进程都拥有各自的用户空间,各个进程之间不能相互访问彼此的用户空间。因此,对每一个具体的进程而言,都拥有4GB的虚拟地址空间。 一个程序在经过编译、链接之后形成的地址空间是一个虚拟的地址空间,原创 2021-05-30 16:05:47 · 912 阅读 · 0 评论 -
C++:编译链接运行原理
编译链接运行原理 1.预编译(生成.i文件)* 1>将所有的“#define”删除,并展开所有宏; 2>处理所有条件预编译指令,如“#if”、"#ifdef"、"#elif"、“#else”、“#endif”; 3>处理“#include”预编译指令,将包含的文件插入到该预编译指令的位置,这是一个递归的过程,即被包含的文件可能包含其他文件; 4>删除所有注释“//”和“/* */”; 5>添加行号和文件名标识,以便于编译时编译器产生调用的行号信息,用于编译时产生编译错误或警告时原创 2021-05-30 14:38:09 · 162 阅读 · 0 评论