08 2023 档案
摘要:# 一、运算符函数 在C++中会把运算符当做函数处理,一个表达式,其实可能调用了很多运算符函数来完成计算,这种特性对内建类型没有用,但是对于自建类型而言,通过设计运算符函数能够进行**个性化运算**,以此**提高代码的可读性、易用性** 例如string类: ```c++ string str,st
阅读全文
摘要:# 一、什么是指针 指针是一种特殊的**数据类型**,使用它可以定义指针变量,指针变量中**存储的是整型数据**,该数据代表了内存的编号(**地址**),可以通过这个编号访问到对应的内存 # 二、为什么要使用指针 1、函数之间内存是相互独立的,但有时候需要**函数之间共享变量** - 普通传参是单向
阅读全文
摘要:# 单例模式 ## 什么是单例模式: 只能实例化一个类对象(全局有且只有一个类的static实例) ## 使用场景: 进程管理器、日志管理器、网站访问计数器、应用配置程序、线程池、服务器的连接管理器 ## 实现单例模式的原理/步骤 1、禁止在类外随意实例化对象,**把构造函数/拷贝构造都私有化pri
阅读全文
摘要:# 静态成员(static) ## 什么是静态成员: 被static修饰的成员/成员函数就叫静态成员,不管有多少对象,静态成员只有一份存于公共内存中。 设计静态数据成员目的是信息共享和信息交流 ## 普通成员特点: * 成员变量:每个类对象中都有一份属于自己的成员变量,相互独立、没有关联。普通成员与
阅读全文
摘要:# 拷贝构造 拷贝构造就是一种特殊版本的构造函数, * 格式: ```c++ 类名(const 类名& that) { //执行给每个成员变量进行赋值 } ``` * 什么时候会调用拷贝构造: 当使用旧对象(已new的)给新对象(新new的)初始化时,会自动调用拷贝构造 ```c++ Test t1
阅读全文
摘要:# this指针 1. this指针的类型:**类类型* const**。不能被修改和赋值。 2. **只能在成员函数的内部使用**。全局函数、静态函数都不能使用this. 3. this指针本质上其实是一个成员函数的形参(栈),是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中
阅读全文
摘要:# 对象的创建和销毁过程分析 ## 1、对象的创建过程 ①给对象划分内存空间(栈、堆) ②执行初始化列表 * 根据**继承表的顺序**调用父类的无参构造或有参构造 通过:父类(val)调用父类的有参构造 * 根据**成员变量的定义顺序**调用类类型成员的无参构造或有参构造 通过:类类型成员名(val
阅读全文
摘要:# 面向对象和面向过程 面向过程: 关注如何解决问题,以及解决问题的步骤 ## 面向对象: 关注的解决问题的"人"即"对象",以及实现能解决问题的"对象" 注意:面向对象的细节的本质上还是面向过程,因此面向对象不是解决问题的捷径,而是以更高的维度去思考问题 ## 面向对象的四个特性: ### 抽象:
阅读全文
摘要:# 构造函数 构造函数就是与类名同名的成员函数,当**实例化对象时它会自动执行**,当构造函数执行结束后,对象才完成实例化 任务:一般负责对类对象进行初始化、资源分配 ```c++ class 类名 { int* p; public: 类名(参数) { p = new int; } }; ``` 1
阅读全文
摘要:# 三、内联函数inline ## 1、普通函数 普通函数会被编译成二进制指令存储在代码段中,调用语句会生成一条跳转指令,当程序运行到调用语句时,会跳转该函数在代码段中对应的位置执行,执行结束会返回 ## 2、什么是内联函数 内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内联
阅读全文
摘要:# # 一、函数重载 ## 1、什么是函数重载? 在同一作用域下,**函数名相同,参数列表不同**的函数构成重载关系 函数重载与返回值类型、参数名无关 与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关 ## 2、C++是如何实现函数重载的? 通过g++ -S 生成汇编代码可知,编译器
阅读全文
摘要:# C++学习day01 ## 一、C++介绍 本贾尼.斯特劳斯特卢普,于1979年在**贝尔实验室**负责分析UNIX系统内核流量的分布情况时,特别希望有一种更加模块化的工具,于1979.10开始着手研发一款新的编程语言,在C语言的基础上增加了面向对象的机制,也就是C++,**1983**年完成了
阅读全文
摘要:稳定性:在待排序的数据中,对于数值相同的数据,在整个排序过程中如果不会改变他们原来的先后顺序,则认为该排序算法是稳定的。 内排序:所有排序操作都在内存中完成。 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。 比较排序:在排序的最终结果里,元素之间的次序依赖于他们
阅读全文
摘要:1.在一个长度为 n ( n>1 )的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。 A、删除单链表中的第一个元素 B、删除单链表中的最后一个元素 C、在单链表第一个元素前插入一个新元素 D、在单链表最后一个元素后插入一个新元素 答案:B;需要遍历至最后一个元素的前一个 2、Numbe
阅读全文
摘要:时间复杂度:由于计算机的性能不同,无法准确地确定一个算法的执行时间,因此使用执行算法的次数来代表算法的时间复杂度,一般用O(公式)来表示。 空间复杂度:执行一个程序(算法)所需要的内存空间的大小,是对一个算法在运行过程中临时占用存储空间大小的衡量。通常来说,只要这个算法不涉及动态分配内存以及递归,通
阅读全文
摘要:1、将一棵二叉树的根节点放入队列,然后非递归的执行如下操作:将出队节点的所有子节点入队。以上操作可以实现哪种遍历( ) A、前序遍历 B、中序遍历 C、后续遍历 D、层序编历 答案:D; 二叉树的遍历: ①前序遍历:根、左、右 ②中序遍历:左、跟、右 ③后序遍历:左、右、跟 ④层序遍历:从上到下,从
阅读全文
摘要:1、设数据结构 B=(D, R) ,其中D={ a, b, c, d, e, f }、 R={ (a, b ) , (b, c ) , (c, d ) , (d, e), (e, f), (f, a) },该数据结构为( )。 A、非线性结构 B、循环队列 C、循环链表 D、线性结构 答案:A; 图
阅读全文
摘要:1、用邻接表表示图进行深度优先遍历时,通常是采用()来实现算法的。 A.栈 B.队列 C.树 D.图 答案:A; 深度优先遍历(DFS): 从某个顶点出发,一直往下一个顶点遍历,直到没有下一个顶点为止,再返回上一个顶点的其他路径继续进行深度优先,直到该出发顶点的所有深度优先遍历结束,同样的操作对每个
阅读全文