![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习
文章平均质量分 90
C++学习笔记
lge101058
这个作者很懒,什么都没留下…
展开
-
【C++】学习笔记——map和set
set文档map文档map底层其实是pair。而pair其实是一个类模板。成员变量有两个,一个first,一个second,在map里,first一般存的是key,second存的是value。原创 2024-05-23 22:08:21 · 765 阅读 · 0 评论 -
【C++】学习笔记——二叉搜索树
中序遍历需要借助当前节点,所以需要一个形参,但是根节点又是属于类的私有成员变量,在外部无法访问,所以我们需要嵌套一层函数来访问。二叉搜索树,树是一种结构,需要用类来定义,节点也是一种结构,需要另一个类来定义。插入也是比较简单的,当插入的关键字已存在时,现阶段没有多大用处,我们就插入已有的关键字,当关键字不存在时,也是一种查找,当。唯一需要注意的是,需要使用一个指针指向插入位置的父节点,否则无法进行节点之间的连接。这种情况最为复杂,也最难。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。原创 2024-05-20 19:02:27 · 851 阅读 · 0 评论 -
【C++】学习笔记——多态_2
普通函数的继承是一种实现继承,派生类继承了基类函数,可以使用函数,继承的是函数的实现。虚函数的继承是一种接口继承,派生类继承的是基类虚函数的接口,目的是为了重写,达成多态,继承的是接口。我们应该这样看,我们将Derive的对象分成三份,Base1部分、Base2部分和自己的部分。动态绑定又称后期绑定(晚绑定),是在程序运行期间,根据具体拿到的类型确定程序的具体行为,调用具体的函数,也称为动态多态。我们知道虚函数表的地址,但是不知道结束条件,无法遍历指针数组。从上面的结果来看,很明显,虚函数表存在于常量区。原创 2024-05-17 21:34:34 · 629 阅读 · 0 评论 -
【C++】学习笔记——多态_1
public:cout << "买票-全价" << endl;public:cout << "买票-半价" << endl;// 多态int main()Person ps;Student st;Func(ps);// 子类可以赋值给父类---切片Func(st);return 0;在继承中想要构成多态是有条件的。1. 必须通过父类的指针或者引用调用虚函数。2. 被调用的函数必须是 虚函数 ,且子类必须对父类的虚函数进行重写。原创 2024-05-15 22:29:40 · 944 阅读 · 0 评论 -
【C++】学习笔记——继承_2
这个方法可以统计整个体系一共产生了多少个对象。原创 2024-05-14 21:01:03 · 297 阅读 · 0 评论 -
【C++】学习笔记——继承_1
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(或叫做子类),被拓展的类叫基类(或叫做父类)。比如说:我们想设计一个学生管理系统,涉及到的对象有学生和老师,分别封装成两个类,但是老师和学生都含有姓名、年龄、性别等等的信息,要是将这些变量都分别放到各个类里,就会有些冗余。而继承机制就是,设计一个类,这个类里有共有的成员变量或成员函数,派生出的子类继承这个父类,就能拥有父类的这些成员变量和成员函数,减少了冗余。原创 2024-05-13 20:53:06 · 885 阅读 · 0 评论 -
【C++】学习笔记——模板进阶
当声明和定义分离时,声明处有调用,所以知道模板实例化的类型,但是没有实现功能,定义处没有调用,可以实现功能但是不知道实例化的类型,所以定义处在编译时,并不会生成地址,导致链接时找不到地址从而产生链接错误。解决方法有两种:①模板定义的位置显式实例化。(这种方法不实用,不推荐使用)②。原创 2024-05-11 21:45:32 · 1135 阅读 · 0 评论 -
【C++】学习笔记——优先级队列
优先级队列其实也不属于队列,它跟stack和queue一样,都是容器适配器。优先级队列的默认适配容器是vector。要使用优先级队列的话,需要包含queue头文件。// 包含 queue 头文件int main()pq.push(3);pq.push(1);pq.push(4);pq.push(2);while (!pq.pop();return 0;我们插入的数据是3 1 4 2,打印出来的数据却是4 3 2 1。原创 2024-05-10 23:06:47 · 1084 阅读 · 0 评论 -
【C++】学习笔记——stack和queue
stack就是我们常说的栈,而queue就是队列。栈就是后进先出的数据结构,队列就是先进先出的数据结构。从严格意义上来讲,这里的栈和队列已经不属于容器了,而是属于容器适配器。什么是容器适配器呢,我们待会再说。原创 2024-05-09 20:25:07 · 954 阅读 · 0 评论 -
【C++】学习笔记——list
是的,list就是带头双向循环链表。原创 2024-05-06 21:52:54 · 857 阅读 · 0 评论 -
【C++】学习笔记——vector_3
时,将内容也给析构了,所以后面生命周期结束时的析构就出现了多重析构的问题。但是,大家有没有想过,这里的迭代器传入的是临时变量,临时变量更新了后,实参并不会修改,所以在外面这个迭代器的值已经。就更不行了,不能修改的迭代器算什么迭代器?中第一次遇到了迭代器失效的问题,但是我们通过更新地址的问题解决了迭代器失效的问题。迭代器表示的位置,将会导致循环终止不了,所以引发了一系列问题。函数删除后会将后面的数据前往移动,删除后迭代器的位置是一个新的数据,然后。是的,类模板里面又加了一个函数模板,这样的作用是什么呢?原创 2024-05-05 18:58:51 · 1228 阅读 · 0 评论 -
【C++】学习笔记——vector_2
内置类型的默认值:int就是0,double就是0.0,指针类型就是nullptr 这样。这么看来,上面的第二个参数就能理解了吧。使用的是模板,不能锁死任意一个类型,所以不能冒然的 等于0 啊之类的,万一是个类不久出大问题了吗?,看是看懂了,但是,这不本末倒置了吗?祖师爷就是为了解决这种问题,他将内置类型给升级成了,有点厉害啊。没错,就是用 auto,自动匹配类型,创建出一个 vector< T >。上节我们以二维数组结束,这一节我们以二维数组开始。保持一致,需要理解。的值,当发生扩容时,原创 2024-05-04 18:03:50 · 580 阅读 · 0 评论 -
【C++】学习笔记——vector_1
学了string类后,学习其他容器就非常简单了。vector是表示可变大小数组的序列容器。就是高配版数组。用法就是。原创 2024-05-03 22:14:09 · 510 阅读 · 0 评论 -
【C++】学习笔记——string_5
我们知道,拷贝构造不能是浅拷贝,假如是浅拷贝,那么会导致两个指针指向同一块空间,一个修改另一个也会发生变化,多次析构的问题。我们发现,库里的swap整整调用了3次拷贝和1次析构,虽然能用,但是它非常搓,所以我们要实现一个对我们来说更加好用的。这里赋值重载的新式写法还能优化(行数),既然在函数内部要调用拷贝构造,为什么不在传参的时候直接调用拷贝构造呢?这样做其实就是赌有的对象不去修改内容,只要有这样的对象,那么就算是一种优化。,那么应该是 12 啊(32位下,64位是 24),为什么库里的。原创 2024-05-03 20:59:56 · 1101 阅读 · 0 评论 -
【C++】学习笔记——string_4
指向同一块空间,这就是浅拷贝导致的,这样的情况会使:操作其中一个,另一个也会改变,同一块空间会被析构两次,产生报错。有人可能会说哈,拷贝构造函数是默认成员函数,不写编译器也会自动生成,我们不需要写,但是真的不需要写吗?但是,我们要知道,下标访问支持可读可写,但是const对象不支持,所以刚刚那个函数不支持const对象,于是我们得重载一个针对于const对象的下标访问函数。对,我们应该是得到一个空串,空串末尾是携带。由于我们还没有实现流插入和流提取函数,所以我们无法直接输出我们的字符串,但是我们可以实现。原创 2024-05-01 21:43:46 · 1241 阅读 · 0 评论 -
【C++】学习笔记——string_3
构造函数不一定非要使用初始化列表,我们在有参构造函数里面若是使用初始化列表,由于三个对象都需要调用。就是拷贝,缺点是必须先创建好一个字符数组,字符数组还是形参,返回拷贝的个数,被下面的。当然,有其他类型转换成字符串类型,就有字符串类型转换成其他类型。很多,我们要返回最后一个后缀,该怎么办?接下来我们来实现构造函数,分为无参构造函数,和有参构造函数。上面的函数中,有些是不常用的,咱们只挑几个重要的进行讲解。类的时候,我们需要将其封装一下,包含在自己的命名空间下。再假设一个情景,有一个网址,将其。原创 2024-05-01 19:07:26 · 972 阅读 · 0 评论 -
【C++】学习笔记——string_2
需要挪动数据,复杂度大,能不用就不用。这里函数太多,就不一一介绍了,多看看文档就会用了。函数不常用,返回这个容器能够存储的最大长度,跟编译器有关,输出结果不唯一。函数的作用就是手动分配空间,但是不一定刚刚好分派到你想要的大小。函数就是清理的意思,它会将容易里的数据都清除。小时,字符串后面会默认插入 ‘\0’,或者给定的值。一般来说,迭代器都是正向的遍历容器,虽然可以通过从。,我们来看一看VS环境下的C++扩容机制吧。函数返回容器的当前容量,即分配的空间,反向迭代器**,可以做到反向遍历容器。原创 2024-04-30 21:11:00 · 1077 阅读 · 0 评论 -
【C++】学习笔记——string_1
是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2024-04-29 21:13:48 · 713 阅读 · 0 评论 -
【C++】学习笔记——模板
new的原理调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造delete的原理在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间new T[N]的原理调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请,在申请的空间上执行N次构造函数delete[]的原理在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。原创 2024-04-29 16:42:03 · 1059 阅读 · 0 评论 -
【C++】学习笔记——内存管理
我们在实现日期类的时候也实现了重载 operator> ,但是由于 this指针 位于形参的第一个位置,我们不得不将这个重载函数设成全局函数,但是全局函数又不能访问类的私有成员变量。我们是怎么解决这个问题的呢?是的,我们将这个函数的声明放在类内,然后在前面加上 friend 关键字,使其成为友元函数,友元函数就能够在类外访问类的私有成员变量了。友元函数突破了封装,提供了便利,但这一定是好的吗?类的封装是非常重要的,友元函数能不使用就不使用。友元不仅有友元函数,还有友元类。在上原创 2024-04-28 17:45:55 · 811 阅读 · 0 评论 -
【C++】学习笔记——类和对象_5
上一篇我们已经大致将日期类的重要功能都给实现了,这节将会对日期类进行完善,使其更加便捷好用。在C++中,内置类型是可以使用流插入( > ),我们能不能将流插入和流提取也给重载了呢?使我们的日期类也能使用流插入和流提取?当然可以啦,其实,流插入和流提取是 iostream 库里面的两个函数,类型分别是 ostream 和 istream。我们可以这样实现:嗯,看起来没有问题,跑一下试试。欸?怎么报错了?一看报错原因,哦,原来运算符重载原本是这样的 d1.operator原创 2024-04-27 22:19:13 · 1088 阅读 · 0 评论 -
【C++】学习笔记——类和对象_4
由于也是浅拷贝,所以涉及到堆上的空间开辟时,不能使用编译器自动生成的赋值运算符重载函数。原创 2024-04-22 22:23:35 · 651 阅读 · 0 评论 -
【C++】学习笔记——C++入门_1
我先说一种情景,比如说在某个文件下,非常频繁的使用某个命名空间域内的变量或者函数或者其他等等,我们每次访问和调用都需要加上命名空间名和作用域限定符,这也太麻烦了吧,于是乎,==using namespace == 这种方式就是展开命名空间,意思就是把访问权限打开,访问的时候就不需要指定作用域,直接访问就可以访问到。,这个关键字的意思就是命名空间,用法有一点点向结构体,但他定义的不是结构体名称,而是命名空间的名称。展开命名空间还是有弊端的,所以在日常练习中可以随意展开,在做项目的时候不建议展开。原创 2024-03-18 16:05:52 · 963 阅读 · 0 评论 -
【C++】学习笔记——C++入门_3
由于形参只是实参的一份临时拷贝,改变形参并不能改变实参的值,所以我们一般通过传实参的地址,通过指针的方法来改变实参。在返回类型中加上引用后,我们返回的是a的别名 ,但是a已经销毁了,所以a空间内的内容以及不确定了,返回的a的别名导致非法访问,结果未知。当然,引用可以套用,我可以给a取别名为b,也可以给b取别名为c,此时a,b,c三者为同一变量。在一般的函数中,我们都是类似上面的代码那样返回的。,这样,新称号就是原名字的别名,两个名称都表示同一个变量。,编译器不会为引用变量开辟内存空间,它和它引用的变量。原创 2024-03-25 13:18:19 · 577 阅读 · 0 评论 -
【C++】学习笔记——C++入门_2
我们知道,C语言是不支持出现同名函数的,也就是说不支持函数重载的,那C++为啥就支持函数重载,他是在哪个地方进行了改动,才使得C++能够支持函数重载?哦豁,报错了,看来不能同时给,那在哪给呢,在声明给,还是在定义给,还是都可以?C++和C语言的融会贯通的,当不知道C++怎么控制精度时,可以去上网查查文档,也可以使用C语言的输出嘛,有什么方法就用什么方法。来的,声明处没有缺省,在主函数那调用的函数不给实参肯定是有问题的,所以说,过程中, 调用函数需要找到函数的地址才能够调用函数,而在C语言当中,是。原创 2024-03-20 23:56:01 · 870 阅读 · 1 评论 -
【C++】学习笔记——类和对象_2
内置类型不做处理其实属于缺陷,如果也能处理则会更加方便,于是在C++11版本,C++委员会对这个语法打了补丁,原创 2024-04-20 14:54:39 · 907 阅读 · 0 评论 -
【C++】学习笔记——类和对象_3
咦?自定义类型最终也是属于内置类型,所以说,拷贝构造函数是不是不用写,编译器自动生成就很完美了呢?当然不是,这涉及到了浅拷贝和深拷贝的问题了。原创 2024-04-21 16:36:31 · 1080 阅读 · 0 评论 -
【C++】学习笔记——类和对象_1
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。class Datepublic:// 这里是不是看的非常迷?day = day;int month;int day;return 0;原创 2024-04-18 22:18:48 · 987 阅读 · 0 评论