
C++
文章平均质量分 93
个人学习C++总结
沧浪之水!
你想拥有你从未拥有过的东西,那么你就要去做你从未做过的事情!
展开
-
C++:指针避坑指南
目录错误一:野指针错误二:忘记删堆内存错误三:解引用空指针错误四:delete指针后继续使用错误五:数组用单个delete删除错误六:指针运算越界错误七:返回局部变量的指针错误八:指针类型不匹配错误九:多重指针不打基础错误十:const和指针的位置摆错错误十一:构造函数漏初始化指针错误十二:函数参数传递指针没声明const错误十三:指针移动导致内存释放失败错误十四:指针和引用混用错误十五:不安全的指针向下转换错误十六:函数指针调用前未检查错误十七:在类里delete this 指针错误十八:智能指针互相引用原创 2025-02-22 09:09:08 · 622 阅读 · 0 评论 -
C++:高度平衡二叉搜索树(AVLTree) [数据结构]
AVL 树节点是一个三叉链结构,除了指向左右孩子的指针,还有一个指向其父亲的指针,数据域是键值对,即 pair 对象,还引入了平衡因子,用来判断是否需要进行平衡操作。// AVL树节点的定义(KV模型)// 该节点的左孩子// 该节点的右孩子// 该节点的双亲指针// 键值对int _bf;原创 2025-02-15 11:31:22 · 949 阅读 · 0 评论 -
C++:Map和Set
在理解这句前,要首先知道insert调用的结果是pair<iterator,bool> insert (const value_type& val),返回的是一个pair键值对,这里通过this指针调用了insert函数,再对所得到的键值对取它的first元素,也就是迭代器,再对迭代器进行解引用,迭代器指向的就是插入元素的位置,对迭代器的second解引用得到的就是Key_Value中的Value值。那就是关联式容器,那么有什么区别呢?关联式容器也是用来存储数据的,与序列容器不同的是,其存的是。原创 2025-02-13 21:17:52 · 1201 阅读 · 1 评论 -
C++:多态的原理
重写是语法的叫法,覆盖是原理层的叫法。在通过监视窗口,出了有_b成员,还多了一个_vfptr数组,这个指针数组实际上叫做虚函数表指针数组,严格意义来说,一个含有虚函数的类中至少有一个虚函数表指针数组,这个数组中存放的是虚函数的函数地址,虚函数表也叫做虚表。这里 Derive 对象的两张虚表中的重写的 Derive::func1 函数,虽然函数地址不一样,但是当 Base1 或 Base2 指针指向 Derive对象时,调的都是 Derive 中的 func1,是同一个函数。多态的原理到底是什么?原创 2024-11-26 19:20:01 · 1446 阅读 · 0 评论 -
C++:多态
1、多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。2、必须通过基类的指针或者引用调用虚函数。3、被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。原创 2024-11-22 18:01:49 · 1106 阅读 · 0 评论 -
C++:继承
继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用(white-box reuse)。术语 “白箱” 是相对可视性而言:在继承方式中,基类的内部细节对子类可见。继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。原创 2024-11-14 18:33:43 · 1184 阅读 · 0 评论 -
C++:模板之全
在C语言中是不支持泛型编程的,C++就支持泛型编程。什么是泛型编程?首先回忆一下函数重载:在C语言中是不允许函数重载的,C++中是可以的,C++可以根据参数类型不同,来转汇编成不同的函数名,因此就构成了重载。但是函数重载是存在弊端的,比如同样的代码语句逻辑一模一样,只有函数参数的类型和函数体中的类型不一样。并且代码的复用率比较低,有新类型出现的时候就要重写一个函数,可维护性比较低,一个出错可能所有的重载都会出错。原创 2024-11-11 18:30:24 · 1168 阅读 · 0 评论 -
C++:vector容器的使用和实现
前面我们介绍了string容器的使用,容器是一通百通的,只要理解了string,那么理解接下来的容器是非常简单的。那么就开始vector的学习之旅吧!1、相信大家都知道数组的使用,vector其实就是表示可变大小数组的序列容器。2、vector和数组一样,采用的是连续存储空间来存储元素,也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。原创 2024-11-01 17:48:53 · 1190 阅读 · 0 评论 -
C++: String容器的使用和实现
标准模板库是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2024-10-30 14:46:56 · 1035 阅读 · 0 评论 -
C/C++内存和内存管理
*栈**:自动管理,访问速度快,适合短期使用的数据。**堆**:手动管理,访问速度较慢,适合长期使用的数据。简单的来说:1.原创 2024-10-29 15:41:22 · 1235 阅读 · 0 评论 -
C++类和对象(中)
一个类的大小,实际就是。原创 2024-10-27 22:14:46 · 828 阅读 · 0 评论 -
C++入门必备知识
命名空间可以定义变量、函数、结构体、嵌套定义。原创 2024-10-13 19:17:47 · 1095 阅读 · 0 评论 -
类与对象(下)
假如这里我只需要调用类内的成员函数print,但如果正常来说我是需要创建一个对象,再通过对象去引用这个类内的成员函数,这是十分繁琐的,如果使用匿名对象,我不关注这个对象是谁,这个对象是多少,我只关心能不能引用类内的成员函数,因此就可以这样使用,相比起使用定义对象的方法来看,这样的方法的生命周期更短。匿名对象的生命周期只在这一行,结束后就进行析构,而正常生成的对象需要在main函数结束后才会进行析构,普通生成的对象的生命周期是它的局部域。C++中引入了匿名对象的概念,没有名字的对象。此时的2就只是一个2。原创 2024-09-28 16:02:43 · 319 阅读 · 0 评论