C++学习
文章平均质量分 89
记录个人学习历程
_Equinox
遗憾是常态
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[C++11]可变参数模板和参数包展开
/...上面的我们把带…的模板参数称为模板参数包(template parameter pack)上面这个函数模板的参数args前面有省略号,我们称之为模板参数包(template parameter pack)的可变模版参数,它里面包含了0到N个模版参数,而我们是无法直接获取args中的每个参数的,只能通过展开参数包的方式来获取参数包中的每个参数。可变参数模板参数高度泛化,提高了编程的泛用性。通过递归每次拆出一个参数,展开参数包利用初始化列表展开参数包。原创 2023-11-21 14:35:22 · 1603 阅读 · 0 评论 -
C/C++杂谈-printf的可变参数机制
C++11引入了可变参数模板机制,对模板参数进行了高度泛化,但是对于可变参数其实C语言学习中早已遇到过,那就是printf可以进行多参数的输出,这是怎么实现的呢?原创 2023-11-21 14:33:41 · 682 阅读 · 0 评论 -
C++ 多态详解
面向对象语言的三大特征:封装,继承,多态。我们已经接触了封装和继承了。封装的本质是:对外暴露必要的接口,但内部的具体实现细节和部分的核心接口对外是不可见的,仅对外开放必要功能性接口。继承的本质是为了复用,复用基类的数据成员和方法。对于多态而言,多态的实现要求必须是公有继承作为前提,而不同对象的调用会产生不同的结果。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Cat和Dog继承了Animal。Animal对象Say-动物语言,Cat对象Say-喵,Dog对象Say-汪。原创 2023-07-19 21:32:47 · 647 阅读 · 0 评论 -
C++ 继承详解
我们知道C++是一门面向对象的语言,面向对象的三大特性:封装,继承,多态,继承是实现多态性的基础,而继承和多态这两个特性的内容更考验对于细节的把握继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。(继承关系是一种垂直关系)下面是一个继承运用的实例代码//基类。原创 2023-07-19 06:30:00 · 1306 阅读 · 0 评论 -
c++模板进阶
通过前面的几个STL的学习以及模拟实现 , 我们对泛型编程有了一定的深入认识,模板就是我们实现泛型编程的基础,很好的实现了代码的复用,避免了代码冗余。通常情况下,模板可以对大部分类型进行函数体复用 , 但是对于某些类型还是要特殊处理,比如比较大小的函数,我们对于int等类型直接比较即可 , 但对于字符串我们可能要对它们的首元素ASCII码进行比较日期的比较class Datepublic:{}private:int _year;int _month;int _day;原创 2023-07-18 22:00:00 · 182 阅读 · 1 评论 -
C++ stl -- stack / queue / priority_queue
deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和 删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。这个是deque一段的buffer数组,所以deque并不是真正连续的空间,它是由一段一段这样的buffer数组链接而成,一段一段的buffer数组被放在中控,这个中控就是一个指针数组,实际上deque类似于一个动态的二维数组, 如图:这里的缓冲区就是buffer数组,用于存放数据。原创 2023-07-18 17:37:43 · 232 阅读 · 1 评论 -
C++ STL -- list
C语言学习中有一个数据结构叫做链表 , 当时引入这个数据结构是因为对于数组我们可以随机访问 , 但是如果进行插入的话就要对插入位置往后进行挪动,效率较低,所以我们创造了一个能够在任意位置插入时间复杂度都是O(1)的链表 , 而链表我们学过基础的单向链表 , 双向链表 , 循环链表等等, stl中的list容器就是一个双向链表,它的接口基本上跟vector相似度很高 , 只不过不支持随机访问罢了 , 在学习list过程中我们会认识到实现迭代器的新的封装方式 ,我们要了解其底层逻辑,特性以及实现方式。原创 2023-06-28 21:07:46 · 360 阅读 · 1 评论 -
C++ vector剖析与模拟实现
+finish;原创 2023-05-22 17:27:17 · 189 阅读 · 1 评论 -
C++ STL ---- string
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2023-05-19 20:44:23 · 440 阅读 · 1 评论 -
C++学习--内存管理
我们发现new/delete操作自定义类型时分别自动调用了对应的构造/析构函数,当我们换成C语言的内存分配方式时,便不会调用new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理。原创 2023-05-19 11:44:08 · 164 阅读 · 0 评论 -
C++学习--类和对象(下)
我们是不能在初始化列表对static的成员变量进行初始化的,因为static修饰的成员变量是存放在静态区的,而平时我们的成员变量是在栈区的,而且static修饰的成员变量是可以被每个对象共享的,如果都来把它初始化一般是不好的。比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接 访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;原创 2023-05-17 17:23:48 · 120 阅读 · 1 评论 -
C++学习--Date类模拟
目前已经学习了C++一些基本的语法,类的基本构成,那么为了快速掌握熟练这些只是,可以写一个Date日期类。原创 2023-05-15 16:55:23 · 120 阅读 · 0 评论 -
C++学习--类与对象(中)
我们发现const A类型的a2调用show函数失败了,因为原先this的类型是A* const , 这就导致了参数类型不匹配,当我们加入const修饰的show后,const修饰的show的隐含this类型为const A* const ,这样程序再次正常运行。C语言学习中我们都写过链表,栈和队列,我们总要实现Init和Destory函数并通过函数的调用来进行空间的开辟和回收,构造函数的出现显然省去了Init这一函数的调用,C++肯定不会只满足于这一点,与构造函数对应,.* 、:: 、sizeof 、?原创 2023-05-15 16:43:38 · 352 阅读 · 1 评论 -
C++学习--类与对象(上)
1.面向过程和面向对象初步认识我们之前已经接触了C语言,它就是一种典型的面向过程的语言,关注的是面向过程,分析求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体不仅可以定义变量,也可以定义函数。原创 2023-05-11 20:42:06 · 121 阅读 · 1 评论 -
c++基础
这里需要复习。原创 2023-05-08 19:27:38 · 153 阅读 · 1 评论
分享