C++知识总结
文章平均质量分 87
码农印象
修炼的过程中,最好有人和你并肩而行,共同成长!努力做一个文邹邹的工具人,你做得越多,你知道的越多......
展开
-
【C++】简易版的String类与深拷贝
前言1、什么是深拷贝?2、深拷贝的内存分析3、普通版本的深拷贝1、什么是深拷贝?深拷贝不同于浅拷贝,它在拷贝的时候会为新对象开辟一块新的内存空间,然后将原对象的内容拷贝到新开辟的空间,这样在资源释放的时候就不会牵扯到多次析构·的问题。比如构造了S1与S2两个对象,在构造S2时拷贝一块跟S1指向数据库一样大的数据块,并将值拷贝下来,这样S1与S2指向各自的数据块,析构时也自然释放自己的数据块。源代码及注释(简洁版)#include <iostream>#include <Wi原创 2021-05-25 12:49:50 · 360 阅读 · 30 评论 -
【C++】虚函数表解析
前言一、虚函数表二、一般继承(无虚函数覆盖)本篇文章转载自:https://coolshell.cn/articles/12165.html 作者:陈皓C++中的虚函数的作用主要是实现了多态的机制。关于多态,就是相同方法具有不同行为,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说...转载 2019-01-20 13:20:07 · 155 阅读 · 4 评论 -
【C++】异常处理机制深度剖析
前言一、C异常处理机制二、C++异常机制1. 异常的抛出(throw)与捕获(catch)2. 栈展开3. 异常捕获的匹配规则4. 异常的重新抛出5. 异常规范6. 异常之构造函数与析构函数6. C++异常的优缺点程序在运行过程中有些错误是可以预料但不可避免的,这时就要力争做到·允许用户排除错误,继续运行程序,或者至少给出适当的提示信息、C/C++都有各自的异常处理机制。无疑异常处理成为了所有预...原创 2019-03-23 02:16:13 · 1241 阅读 · 0 评论 -
【C++】深入浅出面向对象三大特性之继承
前言什么是继承?为什么要引入继承?继承的基本性质派生类构造函数和析构函数的调用顺序同名隐藏机制赋值兼容规则友元关系与继承继承与静态成员单继承特性多继承特性菱形继承特性虚继承的引入虚继承的注意事项组合和继承继承是面向对象程序设计的一个重要特性。可以说,如果没有掌握继承,就等于没有掌握类和对象的精华,就是没有掌握面向对象横须设计的真谛。继承可以在已有的类的基础上创建新的类,新类可以从一个或多个已有类...原创 2019-04-03 20:58:16 · 358 阅读 · 0 评论 -
【C++】set、map、multiset、multimap的用法简介
前言一、STL::set特性二、STL::map特性三、STL::multiset特性RB-tree是一种平衡二叉搜索树,自动排序效果很不错,所以标准的STL中set、map即以RB-tree作为底层的数据结构,set与map所开放的各种操作接口,RB-tree基本上都提供了,因此·set、map都只是调用红黑树的方法对外层的一次封装而已。一、STL::set特性1)set的元素的键值就是实...原创 2019-03-23 03:07:14 · 1237 阅读 · 0 评论 -
【C+】深入浅出面向对象三大特性之多态
前言什么是多态?对象的类型静态多态动态多态动态绑定的先决条件虚函数定义的重要说明重定义(隐藏规则)纯虚函数虚表剖析作为面向对象三大特性之一的多态无疑是最复杂的一个特性。 封装可以使代码模块,继承可以在原有的基础上进行改进,增加新功能,前两者的引入都是为了提高·代码的复用性。那么多态呢?它的目的是为了·接口重用,即当传递不同类的多个对象时,函数都可以通过同一个接口调用不同对象的实现方法。什么是多...原创 2019-04-05 00:37:43 · 466 阅读 · 0 评论 -
【C++】如何防止一个类被继承 && C语言如何实现继承与多态
前言如何防止一个类被继承将构造函数设为私有函数使用虚拟继承C语言如何实现继承与多态如何防止一个类被继承在C#中定义了关键字sealed,被sealed修饰的类是不能被继承的。同样在Java中也有关键字final表示一个类型不能被继承。然而在C++中却没有类似于sealed的关键字,C++11提供final关键字防止继承,因此就只能模拟实现它。这道题出自剑指offer,备受青睐的一道面试题。...原创 2019-04-05 01:18:07 · 437 阅读 · 0 评论 -
【C++】STL库中的vector/deque/list模拟实现stack
前言stack的特性vector实现stackdeque实现stacklist实现stackstack是一种先进后出(FIFO)的数据结构,它只有一个出口。也就意味着它只能新增元素,移除栈顶元素,除此之外,没有任何方法去改变栈中的任何元素。stack的特性stack是一种后进先出的数据结构,这也就限制了stack是不能遍历的,也就意味着我们压栈只能从尾部插入数据,出栈也只能从尾部删除数据。...原创 2019-04-05 01:24:56 · 472 阅读 · 2 评论 -
【C++】模板类+迭代器模拟实现STL::List
前言迭代器的简介?为什么要引入迭代器?STL::List库中的基本操作STL库中List的特性理解迭代器是理解STL的关键所在。·模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型,因此,它们都是STL通用方法的重要组成部分。作为STL的六大组件之一,无疑起到了举足轻重的作用。迭代器的简介?迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素...原创 2019-04-05 01:57:56 · 1115 阅读 · 0 评论 -
【C++】基于Boost库的智能指针
前言为什么引入智能指针智能指针的功能auto_ptr智能指针模拟实现旧版的auto_ptr模拟实现新版的auto_ptrauto_ptr的总结scoped_ptr智能指针(unique_ptr)scoped_ptr如何防拷贝scoped_ptr的疑惑scoped_ptr的总结模拟实现scoped_arrayshared_ptr的设计思想智能指针总结C++提供了4种智能指针用于对分配的内存进行自动...原创 2019-04-05 18:45:43 · 701 阅读 · 0 评论 -
【C++】简易版的String类与深拷贝
前言什么是深拷贝?深拷贝的内存分析普通版本的深拷贝什么是深拷贝?深拷贝不同于浅拷贝,它在拷贝的时候会为新对象开辟一块新的内存空间,然后将原对象的内容拷贝到新开辟的空间,这样在资源释放的时候就不会牵扯到多次析构·的问题。比如构造了S1与S2两个对象,在构造S2时拷贝一块跟S1指向数据库一样大的数据块,并将值拷贝下来,这样S1与S2指向各自的数据块,析构时也自然释放自己的数据块。源代码及注释(...原创 2019-04-03 18:00:12 · 247 阅读 · 0 评论 -
【C++ 】POD类型萃取
前言一、函数模板特化类型萃取依靠的就是模板的特化,模板的特化又分为全特化与偏特化,对于编译器来说,如果你对某一功能有更好的实现,那么就应该使用你的特化版本。一、函数模板特化函数模板只有全特化,而没有偏特化。至于为什么没有偏特化,原因在于已经有了函数重载,偏特化也没什么用。有时候并不总是能够写出对所有可能被实例化的类型都合适的模板,在某些情况下,通用模板定 义对于某个类型可能是完全错误的,或...原创 2019-01-14 16:03:04 · 370 阅读 · 0 评论 -
【C++】单例模式
前言一、什么是单例模式?二、单例模式的两种实现模式1. 饿汉模式方法一、方法二(优化)2. 懒汉模式方法一、方法二:三、单例模式的优缺点一、什么是单例模式?一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程...原创 2019-01-14 15:53:08 · 246 阅读 · 0 评论 -
【C++ STL】算法 <algorithm>中各种算法解析
转自:算法 中各种算法解析一,巡防算法 for_each(容器起始地址,容器结束地址,要执行的方法)#include <iostream>#include <algorithm>#include <vector>using namespace std;template<class T>struct plus2{ ...转载 2018-08-20 22:00:50 · 1049 阅读 · 0 评论 -
我眼中的面向对象
我眼中的面向对象面向过程面向对象我要充话费 -> 用支付宝女朋友要充话费 -> 给我打电话我饿了 -> 用美团外卖女朋友饿了 -> 给我打电话引例动作:撰写一篇博客,发布博客到网站对于面向过程 撰写、发布是两个事件,形成函数并依次调用对于面向对象 博客可以抽象为一种文章,不关心具体实现(实例化),只关心这个抽象概念的一系列行为本...原创 2018-10-08 20:00:16 · 249 阅读 · 0 评论 -
【C++】浅析「namespace/重载/引用」
前言大一第一次接触C++时,不理解 using namespace std;故整理 C++ 中的「namespace/重载/引用」的概念如下//命名空间问题using namespace std;//使用标准库命名空间//函数重载int add(int i, int j);int add(int i, int j, int k);//对add函数重载//指针&引用...原创 2018-10-08 20:34:01 · 359 阅读 · 0 评论 -
【C++】(命名空间、输入和输出、缺省参数、函数重载、引用、内联函数)
一、命名空间1.使用命名空间的目的在C/C++中,变量、函数和类是大量存在的,这些变量、函数和类的名称如果都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字就是针对这种问题的而产生的。2.命名空间的定义命名空间的定义,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即...原创 2018-10-15 16:18:41 · 424 阅读 · 0 评论 -
【C++】自引用this指针的秘密
关于this指针的一个经典回答当我们在进入一个房子之后,可以看见房子里的桌子、椅子、地板等,但是看不到房子的全貌。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个个实例。识别一个类可以分为哪三步?①识别类名。②识别数据成员。③识别成员函数并修改之。this指针的特性:①this指针的类型:类类型 * const。②thi...原创 2018-10-20 20:54:01 · 1575 阅读 · 0 评论 -
【C++】实现日期类运算符重载
什么是日期类?用C++来实现一个日期类Date,包括年(_year)、月(_month)、日(day),来实现对日期的自增(++),自减(–),加上特定天数(+days),减去指定天数(-days),输入输出的实现,以及通过输入两个特定的日期,来计算相隔的天数。其中会用到构造函数、拷贝构造函数、析构函数,以及多类运算符的重载。日期类实现思路在设计日期类过程中,有一个月份相对特殊,那就是二月。...原创 2018-10-21 23:54:15 · 3640 阅读 · 0 评论 -
【C++】动态内存管理
前言一、C/C++内存分布二、回顾C语言中的动态内存管理1. malloc/calloc/realloc的区别是什么?2. 32位平台指针为什么是4个字节?3. 如何malloc一个大于3G的空间?三、C++中的内存管理1. new/delete操作内置类型用法2. new/delete操作自定义类型用法四、operator new和operator delete函数五、定位new表达式六、常见面...原创 2018-11-10 18:59:50 · 370 阅读 · 0 评论 -
【C++】string类、浅拷贝、深拷贝、写时拷贝
前言一、String类初识1.String类出现的原因2.string类的特性二、String类的简单赋值浅拷贝的内存分析1. 什么是浅拷贝?2. 浅拷贝问题总结三、String类加入引用计数的浅拷贝的分析与实现1. 引用计数原理四、String类加入引用计数及静态成员变量的分析与实现1. 为什么要加入静态成员变量五、String类加入引用计数及指针的分析与实现1. 为什么要引入指针?六、写时拷贝...原创 2018-11-11 22:59:01 · 1724 阅读 · 0 评论 -
【C++】C++11特性
前言auto关键字for-each指针空值nullptrlong long 类型constexprusing类型别名列表初始化decltype类型指示符尾置返回类型=default 生成默认构造函数lambda表达式附加auto关键字C语言中其实就有auto关键字,修饰可变化的量,但是由于平时我们直接使用int a = 10;也是声明变量,编译器已经自动帮我们加上了auto关键字,是C语言中应...原创 2018-11-20 15:51:01 · 234 阅读 · 0 评论 -
【C++】函数模板的深入浅出
前言一、什么是模板二、模板的分类三、函数模板四、函数模板的格式五、模板参数六、类型形参转换(类型不确定)七、非类型形参转换(类型确定)八、模板参数说明九、模板函数的重载1)模板函数重载的几点说明十、函数模板的总结十一、C++模板与仿函数实现冒泡排序1)模板函数、模板类、仿函数十二、结语模板是C++的一个重要特性。利用模板机制可以显著减少冗余信息,能大幅度地减少程序代码,进一步提高面向对象程序的可...原创 2018-11-22 15:17:49 · 377 阅读 · 0 评论 -
【C++】模拟实现顺序表Vector容器类
一 、什么是Vector?vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。vector的扩充机制:按照容器现在容量的一倍进行增长。vec...原创 2019-11-04 23:20:39 · 317 阅读 · 0 评论 -
【C++】剖析STL空间配置器
前言一、STL六大组件之间的关系二、STL产生空间配置器的原因?三、STL一级空间配置器四、STL二级空间配置器五、STL空间配置器的遗留问题六、结语以STL的运用角度而言,它是不需要介绍的,但是作为一名C++Coder,剖析并熟练使用它是非常有必要的。今天我不是在造轮子,而是站在它的肩膀上探索空间配置器的设计原理和实现细节。与其说它是一个C++的标准库,不如称之为一门艺术。一、STL六大组件...原创 2019-01-14 01:25:50 · 622 阅读 · 0 评论 -
google开源 C / C ++项目代码规范
声明:本文摘录自谷歌开源项目开源指南。 详见------->谷歌开源项目开源指南。 google开源 C / C ++项目代码规范1.头文件每通常一个 .cc 文件都有一个对应的 .h 文件。也有一些常见例外,如单元测试代码和只包含 main() 函数的 .cc 文件。正确使用头文件可令代码在可读性,文件大小和性能上大为改观。下面的规则将引导你规避使用头文件时的各种陷阱。1.1。自包含...转载 2018-05-15 13:35:36 · 3823 阅读 · 0 评论