C++
文章平均质量分 84
C++入门到进阶
五颗粒粒
你就是海滩下的那乌克丽丽
寻找着逆光让暧昧变成剪影
展开
-
C++智能指针——auto_ptr、unique_ptr和shared_ptr详解
一、为什么使用智能指针?1.1 内存泄漏对于C/C++程序员来说,内存泄漏往往是加班或调试程序的罪魁祸首。什么是内存泄漏呢?内存泄漏是指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。简单来说,就是一块内存我们已经失去了对该段内存的控制。内存泄漏不是指物理结构上的消失。内存泄漏的危害?长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。使用智能指针,通常是因为以下两个场景,用一段代码模拟演示:问题分析:ne原创 2021-08-20 13:41:41 · 910 阅读 · 0 评论 -
C++多态详解——多态的原理,单继承和多继承的虚函数表
一、多态的原理1.1 虚函数表和虚函数表指针举个栗子来认识虚函数表,这是一道常考的笔试题,32位操作系统下sizeof(Base)是多少?/ sizeof(Base)是多少?class Base{public:virtual void Func1(){cout << "Func1()" << endl;}private:int _b = 1;};通过观察测试我们发现b对象是8bytes,除了_b成员,还多一个__vfptr放在对象的前面(注意有些平台可原创 2021-08-17 18:09:17 · 382 阅读 · 0 评论 -
C++STL关联式容器——哈希开散列、闭散列、unordered_map和unordered_set的模拟实现
一、哈希的基本概念1.1 什么是哈希?我们都知道在顺序结构和平衡树中,查找一个元素通过比对关键值来查找。**顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2Nlog_2Nlog2N),**简单来说,搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:插入元原创 2021-06-22 22:17:18 · 258 阅读 · 2 评论 -
C++多态——多态、抽象类的基本概念,重写、重载和重定义的区分
一、多态的概念和定义1.1 什么是多态?多态就是去完成某个行为时,不同的对象就会产生出不同的状态。例如:购买火车票时,普通人全票,学生半价买票。1.2 多态的定义及实现<1> 虚函数在使用多态前引入一个概念——虚函数即被virtual修饰的类成员函数称为虚函数多态的构成条件 //BuyTicket()被virtual关键字修饰,就被称为虚函数 virtual void BuyTicket() { cout << "全价买票" << endl;原创 2021-05-12 18:52:45 · 1534 阅读 · 3 评论 -
C++前缀运算符与后缀运算符的区别
前缀++和后缀++的区别i++: 先访问i再进行++操作++i:先进行++操作再访问i在运算符重载中前缀++和后缀++的使用案例背景:有一个Point类,有成员变量x和y,现需要对Point类重载“++”前缀++:++i最后返回的是被++对象的引用,因此“++i”可以作为左值(例如进行赋值操作:++i=5;)Point& Point::operator++(){x++;y++;return *this;}后缀++:i++最后返回的是被++对象的值,因此“i++”不可以作转载 2021-05-07 09:29:07 · 838 阅读 · 0 评论 -
C++继承详谈——继承的基本概念和使用、菱形继承、虚拟菱形继承原理和继承的笔试面试题
这里写目录标题1. 继承的概念和定义<1> 什么是继承?1. 继承的概念和定义首先回顾一下C++面向对象的三大特性:封装、继承和多态。先解释前两个封装:本质上一种更好的管理。相较于C语言面向过程,C++将数据和方法都要放在类中进行管理,再通过访问限定符进行限制。继承:从类设计的角度来说,是为了避免重复定义数据和方法,进行类角度的复用。<1> 什么是继承?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础原创 2021-05-04 13:49:13 · 380 阅读 · 3 评论 -
C++STL标准模板库——string类的模拟实现
一、string类的模拟实现1.1 string类的传统写法//传统版的string类namespace mystring{ class string { public: //string构造函数 string(const char* str = "") { assert(str); //如果str为nullptr直接报错 _str = new char[strlen(str) + 1]; strcpy(_str, str); } string(const原创 2021-04-01 11:19:12 · 309 阅读 · 0 评论 -
C++STL标准模板库——string类的深浅拷贝
一、深拷贝VS浅拷贝面试官总喜欢让面试者实现一个string类,最主要实现的string类的构造、拷贝构造、赋值运算符重载以及析构函数。但是如果我们只实现一部分功能,其它采用编译器默认实现的功能,就涉及到了深浅拷贝问题,如下我们实现一段string代码//string浅拷贝namespace leon{ class string { public: //string构造函数 string(const char* str = "") { assert(str); //如果str原创 2021-04-01 09:50:22 · 774 阅读 · 0 评论 -
C++STL标准模板库——String类
C++STL标准模板库——String类一、STL简介1.1 什么是STL?1.2 STL的六大组件二级目录三级目录一、STL简介1.1 什么是STL?STL(standard template libaray-标准模板库):是C++标准库的重要组成部分 ,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。1.2 STL的六大组件二级目录三级目录...原创 2021-03-22 09:43:27 · 837 阅读 · 0 评论 -
C++模板初识——泛型编程、函数模板和类模板
C++模板初识——泛型编程、函数模板和类模板一、泛型编程1.1 为什么使用泛型编程?2.2 什么是泛型编程?二、函数模板2.1 什么是函数模板?2.2 函数模板怎么用?<1> 函数模板格式2.3 函数模板的原理<1> 函数模板实例化<2> 模板参数的匹配原则一、泛型编程1.1 为什么使用泛型编程?对于编写一个通用的交换函数,我们可以使用函数重载的方式,函数重载的具体细节可以看以下博客:C++初阶——命名空间、缺省参数和函数重载void Swap(int&原创 2021-03-15 23:56:11 · 314 阅读 · 0 评论 -
C/C++内存管理——C/C++内存管理方式、new和delete的实现原理和内存泄漏
C/C++内存管理——C/C++内存分布、new和delete的实现原理一、C/C++内存分布一、C/C++内存分布对于C/C++孔家首先来看一下这段代码原创 2021-03-13 21:38:12 · 1366 阅读 · 4 评论 -
C++类和对象(下)——初始化列表、static成员和友元
C++类和对象——初始化列表、static成员和友元一、再谈构造函数1.1 构造函数整体赋值1.2 初始化列表三级目录关于C++类和对象的学习C++类和对象(上)——类的基本概念、类的限定符及封装和类成员函数的this指针C++类和对象(中)——类的6个默认成员函数(构造、析构、拷贝构造、赋值运算符重载)一、再谈构造函数1.1 构造函数整体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。例如我们之前创建的Date类class Date{public: D原创 2021-03-10 16:07:40 · 7744 阅读 · 12 评论 -
C++类和对象(中)——类的6个默认成员函数(构造、析构、拷贝构造、赋值运算符重载)
@TOC一、类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数二、构造函数2.1 构造函数概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。2.2 构造函数特性构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是原创 2021-03-07 21:57:46 · 1152 阅读 · 0 评论 -
C++类和对象(上)——类的基本概念、类的限定符及封装和类成员函数的this指针
C++类和对象——类的基本概念、类的封装和类成员函数的this指针一、类的基本概念1.1 类的引入二级目录三级目录一、类的基本概念1.1 类的引入C语言中,结构体中只能定义变量,而在C++中,结构体内不仅可以定义变量,也可以定义函数二级目录三级目录...原创 2021-03-02 09:16:54 · 931 阅读 · 1 评论 -
C++初阶——引用详解
C++入门一、引用1.1 引用概念1.2 引用特性1.3 常引用1.4 使用场景1.5 传值、传引用效率比较1.6 指针和引用的区别一、引用1.1 引用概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。引用书写格式:类型& 引用变量名(对象名) = 引用实体;举个例子:int就是引用类型,b就是引用变量名,a就是引用实体#include<iostream>using namespace std;原创 2021-02-01 23:33:49 · 1566 阅读 · 1 评论 -
C++初阶——命名空间、缺省参数、函数重载和内联函数
C++入门一、命名空间1.1 命名空间的定义1.1.1 普通的命名空间1.2.2 命名空间的嵌套1.3.1 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。1.2 命令空间的使用1.2.1 加命名空间名称及作用域限定符1.2.2 使用using将命名空间中成员引入1.2.3 使用using namespace 命名空间名称引入二、输入&输出三、缺省参数3.1 缺省参数的定义3.2 缺省参数分类3.2.1 全缺省参数3.2.2 半缺省参数四、函数重载4.1 函数重载概念4原创 2021-01-31 22:38:04 · 1859 阅读 · 0 评论