- 博客(18)
- 收藏
- 关注
原创 【C++】多态
🌟多态的构成条件多态是在不同关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。在继承中构成多态的两个条件(指向谁调用谁)1、必须通过基类的指针或者引用调用虚函数;2、被调用的函数必须是虚函数(对象都不行),且派生类必须对基类的虚函数进行重写;🌟虚函数即 被virtual修饰的类成员函数称为虚函数。class Apublic:🌟虚函数的重写。
2024-09-15 22:30:00 665
原创 【C++】继承
🌟继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。之前我们接触的复用都是函数复用,继承是类设计层次的复用。//学号protected:int _jobid;//工号Student s;Teacher t;s.Print();
2024-09-06 22:30:00 872
原创 【C++】stack、queue、priority_queue的模拟实现
2、队长被实现为容器适配器,这些类使用特定容器类的封装对象作为其底层容器,提供一组特定的成员函数来访问其元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。底层是一个堆,在堆后中插入数据,数据就乱了,因此要向上调整堆的数据。
2024-09-02 17:20:36 1054
原创 【C++】vector的模拟实现
• erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。• 出错原因:以上操作,都有可能会导致vector扩容,也就是说vector底层原理旧空间被释放掉,而在打印时,it还使用的是释放之间的旧空间,在对it迭代器操作时,实际操作的是一块已经被释放的空间,而引起代码运行时崩溃。
2024-07-29 15:40:05 970
原创 【C++】vector的使用
Vector是表示大小可以改变的数组的序列容器。与数组一样,vector对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中的效率一样高。但与数组不同,它们的大小可以动态变化,其存储由容器自动处理。在内部,vector使用动态分配的数组来存储它们的元素。当插入新元素时,可能需要重新分配此数组以增加大小,这意味着分配一个新数组并将所有元素移动到其中。就处理时间而言,这是一项相对昂贵的任务,因此,vector不会在每次将元素添加到容器时重新分配。
2024-07-28 13:38:22 676
原创 【C++】 string类的模拟实现
这里我们给字符数组分配一个空间大小来储存\0,同时设置类的_size和_capacity成员变量的初始值。一些细节:以上涉及到相关的接口实现往接着下看😊用常量字符串:_str(new char[strlen(str) + 1])//+1给末尾存储\0//用字符串函数将常量字符串拷贝到对象的数组中我们可以对代码进行优化,可以将上述两个函数通过缺省值合并为一个函数。// +1是给末尾存储\0//用字符串函数将常量字符串拷贝到对象的数值中。
2024-07-20 13:31:51 883
原创 【C++】 string类的常用接口类型的使用
在使用string类时,必须包含#include头文件以及using namespace std;string 是表示字符串的字符串类;该类的接口与常规容器的接口基本相同,再添加一些专门用来操作string的常规操作;string在底层实际是:basic_string模板类的别名,不能操作多字节或者变长字符的序列。
2024-07-15 12:55:13 1044
原创 【C++】初识模板 (函数模板和类模板)
class 类模板名//类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)
2024-05-28 21:39:26 489
原创 【C/C++】内存管理
int main()自定义类型,new才会调用构造初始化,malloc不再适用开空间/释放空间,还会调用构造和析构delete p2;delete p3;return 0;在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc 和 free不会。
2024-05-17 21:50:41 1755 1
原创 【C++】类与对象(中)赋值运算符重载、const成员、取地址操作符重载
返回对象是一个局部对象或者临时对象,出了当前func()函数作用域,就析构销毁了,那么不能引用返回,用引用返回是存在风险的,因为引用对象在func()函数栈帧已经销毁了,这两运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如。运算符有显式调用和直接调用,当写成显式调用时,就牺牲了代码的可读性,此时与函数的调用类似。虽然返回引用可以减少一次拷贝,但是出了函数作用域,返回对象还在,才能引用返回。,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明。
2024-05-08 21:38:36 679 5
原创 【C++】类与对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号类的两种定义方式:1.声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。public:public://成员变量声明char* _sex;int _age;成员函数名前需要加类名::一般情况下,声明和定义要分离,方便操作。小贴士:成员变量命名规则:_ 、m :区分成员变量和外面的普通变量,一般都是加个前缀或者后缀标识符区分,具体看个人习惯。
2024-04-22 20:18:48 685
原创 【C++】入门(下)
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,这是为什么呢?auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//typeid():查看数据类型//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;
2024-04-20 00:50:15 611
原创 【C++】 入门 (上)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量、函数、类型。//命名空间定义//命名空间中可以定义变量、函数、类型struct xlfint val;
2024-03-28 15:25:08 813 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人