c++基础详解
c++基础部分知识总结 有助于更好理解c++的一些特性。
适合有一定c语言基础朋友们对c++有一个更完善的认识。
code配上格子衫
终身学习
展开
-
深入了解c++智能指针(RAII思想)
内存泄漏内存泄漏概念内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄露危害内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死内存泄漏分类C/C++程序中一般我们关心两种方面的内存泄漏:堆内存泄漏(Heap leak)堆内存指的是程序执行中依据须要分配通过malloc / c原创 2020-08-13 19:49:37 · 314 阅读 · 0 评论 -
详解vector,list,deque,使用与优缺点比较
vector/list对比底层结构动态顺序表,一段连续空间带头结点的双向循环链表随机访问支持随机访问,访问某个元素效率O(1)不支持随机访问,访问某个元素效率O(N)插入和删除任意位置插入和删除效率低,需要搬移元素,时间复杂度为O(N),插入时有可能需要增容,增容:开辟新空间,拷贝元素,释放旧空间,导致效率更低任意位置插入和删除效率高,不需要搬移元素,时间复杂度为O(1)空间利用率底层为连续空间,不容易造成内存碎片,空间利用率高,缓存利用率高底层节点动态开辟,小节点容易原创 2020-08-10 16:55:58 · 692 阅读 · 0 评论 -
程序是如何执行起来的 — 预处理>>编译>>汇编>>链接
流程概括一个程序想要执行起来,并不是一蹴而就的,必须经过预处理,编译,汇编,链接。了解这些较为底层的知识,可以帮助我们避开其中的一些“坑”。流程分为四步:预处理:展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)编译:检查语法,生成汇编 ( test.s main .s)汇编:汇编代码转换机器码原创 2020-08-06 18:13:13 · 304 阅读 · 0 评论 -
C++复习过程中零碎知识点(查漏补缺, 持续更新)
1. 命名空间三种使用方式 using N::d using namespace N N::d2. inline与const代替宏3. 构造 析构 拷贝 赋值 两种取地址4. 构造函数可以重载5. 函数重载底层实现 extern “C”6. 预处理 编译 汇编 链接7. class与strut 大小计算8. 大小端区分9. 引用之间const关系10. 拷贝函数传引用11. 引用 const 自定义类型 初始化列表 初始化顺序12. explicit防无名对象 可读性13. stat原创 2020-08-06 17:41:41 · 273 阅读 · 0 评论 -
cin和cout重载实现详解
C++中重载输入cin和输出cout运算符在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++内置的数据类型(例如 bool、int、double 等)和标准库所包含的类类型(例如 string、complex、ofstream、ifstream 等)。如果自己定义了一种新的数据类型,需要用输入输出运算符去处理,那么就必须对它们进行重载。本节以complex类为例来演示输入输出运算符的重载。本节原创 2020-08-06 15:55:07 · 5627 阅读 · 0 评论 -
c++搞定大端小端
存储模式小端存储:数据的低字节存储在地址空间的低字节位,数据的高字节存储在地址空间的高字节位。大端存储:数据的低字节存储在地址空间的高字节位,数据的高字节存储在地址空间的低字节位。判断计算机是小端还是大端的核心点:1、取出int类型低字节存于char,对比取出的低位存放的数据跟整个int类型数据的值。2、跟据联合体特点,所有成员共享内存空间。特别的:网络字节序是大端模式。void judgeSystemEndian(){ int a = 0x1234; char b = st原创 2020-08-06 14:20:34 · 411 阅读 · 0 评论 -
理解面向对象的三大特性 -- 多态(详解!!!)
基于32位操作系统多态概念概念多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。举例直接说明多态是什么可能不太好理解, 举个例子来说明一下。问题一个主人养了猫和狗,猫和狗都有自己爱吃的东西,主人在喂它们的时候,如果既要判断是猫还是狗,再判断他们分别爱吃什么,就显得很麻烦。如果主人养了很多种动物,这样的重复判断,就会浪费很多时间。解决多原创 2020-06-12 18:32:50 · 9599 阅读 · 8 评论 -
理解面向对象三大特性 -- 继承
继承的概念概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。定义被继承的类叫做基类继承的类叫做派生类方式: 派生类 : 继承方式 基类(下面进行详解)简单继承代码示例namespace test1 { class Person { public: void Prin原创 2020-06-11 18:52:11 · 1245 阅读 · 1 评论 -
c++模板 --非类型模板参数,模板特化,模板分离编译详解
非类型模板参数模板参数分为类型形参和非类型形参。类型形参 出现在函数参数类表中,用来实例化的时候确定该参数的类型(一般是内置类型)非类型形参 用一个常量作为模板的一个参数, 在类中当做常量使用。c/cpp不支持数组空间动态定义。于是我们可以使用非类型模板参数来定义数组长度,从而达到我们想要的结果。注意: 非类型模板参数一般使用的都是int char short等整数,浮点数,字符串等不允许当作模板参数。template<class T, size_t N = 10>//N一般要求原创 2020-06-11 14:21:27 · 314 阅读 · 2 评论 -
什么是泛型编程与模板
泛型编程泛型编程简单来说就是编写与类型无关的通用代码,是代码复用的一种手段。而模板是泛型编程的基础。举个简单的例子,假设我们需要写一个swap的交换函数,如果我们按部就班的正常去写的,那么针对以下情况我们就编写出好几种函数,仅仅为了一个简单的交换。void swap(int& a, int& b);//针对int类型void swap(double& a, double& b);//针对double类型void swap(char& a, char&原创 2020-05-29 14:52:32 · 361 阅读 · 0 评论 -
c++中的深浅拷贝以及string的传统写法和现代写法
浅拷贝什么是浅拷贝与其危害浅拷贝也称位拷贝,指的是编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以 当继续对资源进项操作时,就会发生发生了访问违规。举个例子:假设被拷贝过来的值有指针,而这个指针指向的是一块正在使用的空间,那么当拷贝结束后,就有两个对象同时管理这块空间了,这显然是不合理的, 当一个对象释放资源的时候,那么另一个对象如果继续操作这块空间,肯定会出问题的。原创 2020-05-28 10:16:31 · 219 阅读 · 0 评论