C++经典收录
文章平均质量分 95
本专栏收录博主整个C++学习过程和知识分享
是小宇吖~~
自学转行计算机途中,专注于C/C++领域,记录分享学习芝麻,欢迎相互交流
展开
-
C++:类型转换(static_cast、reinterpret_cast、const_cast、dynamic_cast)、RTTI
由于C语言两种类型转换方式都存在缺陷:隐式类型转换会导致诸如数据精度丢失等问题;而显示类型转化代码不清晰。所以C++在兼容C的基础之上,增加了4中强制类型转换:static_cast、reinterpret_cast、const_cast、dynamic_cast。RTTI:Run-time Type identification的简称,即:运行时类型识别。typeid运算符dynamic_cast运算符decltype。原创 2024-09-22 10:47:34 · 1175 阅读 · 3 评论 -
C++11新增特性:智能指针(RAII)
在C++的发展史中,一个出现了4种智能指针,依次为auto_ptr、unique_ptr、shared_ptr、weak_ptr(weak_ptr不符合RAII思想,用于对shared_ptr的补贴)同理,n1的引用计数也更新为2!但是_next属于n2的成员,n1释放了,_next才会析构,而n2由_prev管理,_prev属于n1成员,此时就发生了循环引用,谁也不会释放。weak_ptr不符合RAII,不参与引用计数,仅是对 shared_ptr 所管理对象的一个非拥有性引用,但可以像指针一样使用!原创 2024-09-22 10:35:34 · 1439 阅读 · 0 评论 -
C++:异常
assert断言。比如程序发送段错误时,会触发assert,导致程序直接退出。错误码。程序异常返回错误码,虽然每种错误码背后对于一类错误,但程序员还是无法明确错误原因,以及错误位置,需要程序员自身去查找!所有C++引入了异常机制。当一个函数发生无法处理的错误后,会抛出异常,让函数的直接或间接调用者对该异常进行捕获处理!!C++通过throw抛出异常,当一段段程序可能抛出错误,捕获异常的方式采用try和catch关键字。其中try中存放可能抛出异常的代码,而try中的代码也被称为保护代码;原创 2024-09-17 22:45:00 · 1111 阅读 · 2 评论 -
C++11新增特性:lambda表达式、function包装器、bind绑定
在c++98中,我们使用sort对一段自定义类型进行排序的时候,每次都需要传一个仿函数,即手写一个完整的类。甚至有时需要同时实现排升序和降序,就需要各自手写一个类,非常不方便!所以C++11引入了lambda表达式!lamaba是一个匿名函数对象,是一个可调用对象,表达式本质上也是一个类(vs中类名为lambda_),并实现了operator()。原创 2024-09-17 22:00:00 · 1724 阅读 · 0 评论 -
C++11重大新增特性:左值引用 & 右值引用 & 移动构造 & 移动赋值
如果能想要限制某些默认函数的生成,在C++98中,是该函数设置成private,并且只声明补丁已,这样只要其他人想要调用就会报错。(这很好理解,以移动构造和移动赋值为例,其最重要的功能就是转移右值的资源。在C++11中更简单,只需在该函数声明加上=delete即可,该语法指示编译器不生成对应函数的默认版本,称=delete修饰的函数为删除函数。只有当自定义类型中存在资源的深拷贝时,此时才能移动构造和移动赋值的价值。类似于拷贝构造函数,移动构造函数的第一个参数是该类类型的引用,不同的是引用参数是一个右值。原创 2024-09-04 14:30:41 · 1210 阅读 · 2 评论 -
C++11新增特性:列表初始化(std::initializer_list)& decltype、auto、nullptr、范围for
C++11扩大了初始化列表的使用范围,可用于所有的内置类型和自定义类型的初始化。在C++11中,初始化类列表可用于容器默认构造函数和拷贝复制函数的统一初始值设定!但获取到的变量类型是以字符串形式显示的,无法作为类型定义变量继续使用。在C++98之前,{}一般被用于对数组或结构体元素的统一的列表初始值设定。作为参数的构造函数和赋值重载函数,这样初始化容器对象就更方便了。对象中的值,然后调用容器插入相关接口插入数据。可以将变量类型声明为表达式的指定类型!在C++11中,几乎所有的容器都新增了。原创 2024-09-04 14:13:44 · 1032 阅读 · 0 评论 -
C++:二叉搜索树模拟实现(KV模型)
二叉搜索树又称二叉排序树,作为map、set以及红黑树的底层数据结构基础,对于后续模拟实现封装相关解决具体重要意义。同时二叉搜索树分为Key模型和KV模型,在生活中也具有广泛应用,比如英汉字典,通过英文查找对应中文等等。本篇博客将着手二叉搜索树的底层原理,模拟实现二叉搜索树。原创 2024-02-08 22:15:00 · 3760 阅读 · 49 评论 -
C++:多态究竟是什么?为何能成为面向对象的重要手段之一?
一、多态的概念 二、多态的定义及实现2.1 多态的构成条件、协变、析构函数的重写C++11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类 四、虚函数及虚函数表4.1 虚函数表4.2 虚函数重写覆盖虚表4.3 虚函数存在哪的?虚表存在哪的?五、多态原理5.1 多态调用过程及原理5.2 多态运行时确定?5.3 动态绑定与静态绑定六、单继承和多继承关系的虚函数表6.1 单继承中的虚函数表6.2 多继承中,子类新增虚函数存入那个虚表?原创 2024-01-10 12:32:32 · 4279 阅读 · 68 评论 -
C++:继承
一、继承的概念及定义1.1 继承的概念1.2 继承定义1.2.3 继承基类成员访问方式的变化二、基类和派生类对象赋值转换 三、继承中的作用域四、派生类的默认成员函数五、继承与静态成员六、复杂的菱形继承及菱形虚拟继承6.1 菱形继承的问题6.2 二义性解决办法(1)6.3 二义性解决办法(2)6.4 虚拟继承解决数据冗余和二义性的原理七、继承和组合原创 2024-01-02 12:24:56 · 4038 阅读 · 119 评论 -
C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理
一、C++stack的介绍和使用;二、C++queue的介绍和使用;3.1 deque的简单介绍(了解)、3.2 deque的缺陷、3.3 为什么选择deque作为stack和queue的底层默认容器四、priority_queue的介绍和实现4.1 priority_queue的介绍4.1 priority_queue的介绍增删查改模拟实现前言4.1.1 push()4.1.2 pop()4.3 top()、size()、empty()4.1 priority_queue(优先级队列)增删查原创 2023-12-30 23:30:46 · 4210 阅读 · 76 评论 -
C++:模板进阶
一、非类型模板参数; 二、模板的特化:2.1类模板特化; 全特化、 偏特化;2.2函数模板特化四、模板分离编译:什么是分离编译、模板的分离编译、解决方法五、总结原创 2023-12-29 23:57:46 · 2872 阅读 · 42 评论 -
C++:list增删查改模拟实现
一、list底层双链表验证、节点构造二、迭代器封装实现(重点、难点)2.2 迭代器实现三、list实现3.1 基本框架3.2 迭代器和const迭代器3.2 构造函数、析构函数、拷贝构造、赋值重载3.3 任意位置插入、任意位置删除、尾插、尾删、头插、头删四、list功能完善4.1 迭代器operator->()4.2 打印数据五·、所有代码以及测试用例原创 2023-12-25 16:45:54 · 4894 阅读 · 102 评论 -
C++:vector增删查改模拟实现
一、迭代器1.1 非const迭代器:begin()、end()1.2 const迭代器:begin()、end()二、构造函数、拷贝构造函数、赋值重载、析构函数模拟实现2.1 构造函数2.1.1 无参构造2.1.2 迭代器区间构造2.1.3 n个值构造2.2 拷贝构造2.3 赋值重载3 析构函数三、容量相关:capacity()、size()、reserve()、resize()四、operator[ ]重载 五、元素相关:insert、erase、push_back、pop_ba原创 2023-12-09 08:00:00 · 3658 阅读 · 121 评论 -
C++_String增删查改模拟实现
一、string默认构造、析构函数、拷贝构造、赋值重载 二、迭代器和范围for 三、元素相关:operator[ ] 四、容量相关:size、resize、capacity、reserve五、数据相关:push_bach、append、operator+=、insert、erase六、 关系操作符重载:< 、 ==、 、>=、!=七、find查找字符、字符串、substr7.1 find查找字符7.2 find查找字符串7.3 strsub( ) 模拟实现八、流插入和流提取原创 2023-11-22 12:29:20 · 4013 阅读 · 121 评论 -
C++入门指南:string类文档详细解析(非常经典,建议收藏)
一、 string类解读二·、 string类的常用接口说明2.1 string类对象的常见构造2.2 string类对象的容量操作2.3 string类对象的访问及遍历操作2.4 string类对象的修改操作2.5 string类非成员函数原创 2023-11-05 22:04:34 · 6309 阅读 · 77 评论 -
C++入门指南:10分钟带你快速了解模板究竟是什么(建议收藏!!)
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表//不同类的类名即类型,但类模板不同:类型(类名 + )if(_pData)原创 2023-10-24 12:11:38 · 4698 阅读 · 178 评论 -
1024程序员节特辑 | C++入门指南:内存管理(建议收藏!!)
一、C/C++内存分布1.1 相关例题二、 C语言中动态内存管理方式:malloc/calloc/realloc/free2.1 相关面试题三、C++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型四、operator new与operator delete函数4.1 operator new抛异常演示五、new和delete的实现原理5.1 内置类型5.2 自定义类型5.3 相关例题六、定位new表达式(placement-new)原创 2023-10-23 21:15:21 · 3624 阅读 · 137 评论 -
C++入门指南:类和对象总结笔记(下)
内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。在类和对象阶段,大家深有体会,类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象。Tips:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。原创 2023-10-13 22:16:50 · 5841 阅读 · 232 评论 -
C++入门指南:类和对象总结笔记(中)
而_t是Time类对对象,在对d销毁时,要将其内部包含的Time类的_t对象销毁,所以要调用Time类的析构函数。但是:main函数中不能直接调用Time类的析构函数,实际要释放的是Date类对象,所以编译器会调用Date类的析构函数,而Date没有显式提供,则编译器会给Date类生成一个默认的析构函数,目的是在其内部调用Time类的析构函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁。注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。原创 2023-10-04 19:19:51 · 4704 阅读 · 168 评论 -
C++入门: 类和对象笔记总结(上)
本篇文章首先通过结构体引入类,然后给出类的定义、访问权限、作用域、实例化以及类的存储规则。最后介绍CPP通过this指针来区分不同对象,以及相关笔试题。原创 2023-09-27 22:44:42 · 6347 阅读 · 142 评论 -
浅谈CPP弥补了C的哪些缺陷(建议收藏)
针对C的各种缺陷,Cpp给出的相关的解决办法。(命名空间、C++输入输出、缺省参数、函数重载、引用、内联函数、auto关键字、基于范围的for循环、空指针nullptr)原创 2023-09-23 22:22:28 · 5753 阅读 · 156 评论 -
天选之子C++是如何发展起来的?如何学习C++呢?
什么是C++ 、C++发展史 、C++的重要性、 语言的使用广泛度、 在工作领域、如何学习C++、大佬怎么学?、自己怎么学?原创 2023-09-19 18:36:34 · 7168 阅读 · 106 评论