C++
文章平均质量分 76
C++基础
III Fated
这个作者很懒,什么都没留下…
展开
-
C++11新特性
1. nullptrnullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,考虑:v转载 2022-03-08 00:15:41 · 3038 阅读 · 0 评论 -
static关键字
对一个类中成员变量和成员函数来说,加了static关键字,则此变量/函数就没有了this指针了,必须通过类名才能访问1. 全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量。加了static关键字的全局变量只能在本文件中使用。例如在a.c中定义了static int a=10;那么在b.c中用extern int a是拿不到a的值得,a的作用域只在a.c中。静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意.原创 2022-03-07 09:20:39 · 107 阅读 · 0 评论 -
C++设计模式
单例模式:单例模式主要解决一个全局使用的类频繁的创建和销毁的问题。单例模式下可以确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有三个要素:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。C++的实现有两种,一种通过局部静态变量,利用其只初始化一次的特点,返回对象。另外一种,则是定义全局的指针,getInstance判断该指针是否为空,为空时才实例化对象。单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。这种原创 2022-03-07 09:08:32 · 131 阅读 · 0 评论 -
C++vector和list的比较
vector和list的区别,应用1、概念:1)Vector连续存储的容器,动态数组,在堆上分配空间底层实现:数组两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释放原空间,之前的迭代器会失效。性能:访问:O(1)插入:在最后插入(空间够):很快在最后插入(空间不够)转载 2022-03-07 08:55:48 · 2931 阅读 · 0 评论 -
C++异常机制
异常1.C语言传统的处理错误的方式1.终止程序,如assert。缺陷:用户难以接受。2.返回错误码。缺陷:需要程序员自己去查找对应的错误。3.C标准库中setjmp和longjmp组合。2.C++异常概念异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接调用者处理这个错误。3.异常的使用3.1异常的抛出和捕获异常的抛出和捕获原则a.异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个catch的处理代码。b.被选中的处理代码是调用原创 2022-03-03 17:50:21 · 176 阅读 · 0 评论 -
C++智能指针
智能指针1.内存泄露1.1内存泄露的危害内存泄露指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。1.2内存泄露分类堆内存泄露堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块原创 2022-03-03 17:45:32 · 191 阅读 · 0 评论 -
C++强制类型转换
强制类型转换1.C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发送类型转换。C语言中总共有两种形式的类型转换:1.隐式类型转换:编译器在编译阶段自动运行,不能转就编译失败。2.显示类型转换:需要用户自己处理。2.C++类型转换1.static_caststatic_cast对应C语言隐式类型转换,意义相近的类型。2.reinterpret_castreinterpret_cast对于C语言大部分显原创 2022-03-03 17:35:18 · 1282 阅读 · 0 评论 -
C++多态
C++多态1.多态的概念多态的概念:通俗的来说就是多种形态,具体就是去完成某一个行为,当不同的对象去完成时会产生出不同的状态。比如说买高铁票这一行为,当普通人买票时,是全价买票;学生是半价买票;军人是优先半价买票。2.多态的定义及实现2.1多态的构成条件多态是在具有继承关系的不同类对象,去调用同一函数,产生了不同的行为。在继承中要构成多态还有两个条件:1.必须通过基类的指针或者引用调用虚函数。2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。2.2虚函数即被virtual修原创 2022-03-03 17:30:03 · 533 阅读 · 0 评论 -
C++继承
1.继承的概念及定义1.1继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程,以前我们接触的复用都是函数复用,继承是类设计层次的复用继承后父类的Person的成员都会变成子类的一部分,这里体现出了Student复用了Person的成员,调用Print可以看到成员函数的复用。1.2继承定义1.2.1定义格式1.2.2继承关系的访问限原创 2022-03-03 17:22:15 · 234 阅读 · 0 评论 -
C++string类
1.标准库中的string类1.1string类a.string类是表示字符串的字符串表b.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作c.string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> stringd.不能操作多字节或者变长字符的序列e.在使用string类时,必须包含string头文件以及using namespace std原创 2022-03-03 17:01:30 · 2016 阅读 · 0 评论 -
C++标准模板入门
1.函数模板首先我们来实现一个交换函数,该函数一般用在测试排序算法通过函数的重载我们可以实现不同类型的交换函数,但是这样子写只要有新类型的出现就需要增加对应的函数。而且代码的可维护性也比较低,一个出错可能所以的重载均出错。为解决这类问题C++提供了这样一个模具,通过给这个模具不同的类型,来生成具体类型的代码。函数模板的格式template<typename T1, typename T2,…,typename Tn>例如:typename是用来定义模板参数的关键字,也可以使用c原创 2022-03-03 16:06:48 · 365 阅读 · 0 评论 -
C/C++内存管理
1.C++内存分布图栈又叫堆栈,非静态局部变量/函数参数/返回值等等。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。堆用于程序运行时动态内存分配。数据段存储全局变量和静态数据。代码段可执行的代码/只读常量。2.C语言中动态内存管理方式int main(){int* p1 = (int*)malloc(sizeof(int) * 4);int* p2 = (int*)calloc(4, sizeof(int));int* p3 = (int*)realloc(p2,原创 2022-03-02 14:10:22 · 98 阅读 · 0 评论 -
C++类与对象2
c++原创 2022-03-02 11:09:28 · 437 阅读 · 0 评论 -
C++类与对象1
1.类的引入c语言中,结构体中只能定义变量,在c++中结构体不仅可以定义变量,还可以定义函数。在C++中一般使用class代替struct来定义类。例如class为定义类的关键字,classname为类的名字,{}中为类的主体。类中的元素称为类的成员:类中的数据称为类的属性或成员变量,类中的函数称为类的方法或成员函数在C++中,struct和class定义的类都可以继承,但是他们的继承方式不同struct的默认继承权限和默认访问权限都是publicclass的默认继承权限和默认访问权限都原创 2022-03-02 10:57:03 · 201 阅读 · 0 评论 -
C++基础(2)
5.类中的几个默认的函数及其特点1).构造函数2).析构函数3).拷贝构造函数4).赋值运算符的重载函数默认的函数及其特点:不提供,系统提供;自己提供 ,系统不提供****1.构造函数定义:是一个特殊的成员函数,名字与类名相同,创建类 类型对象时,由编译器自动调用,在对象的生命周期内有且只调用一次,以保证每个数据成员都有一个合适的初值。(它的功能由用户定义,在类对象进入作用域时间调用构造函数)。(1)函数名与类名相同–不能任意命名,否则编译器就不知道它是构造函数(2)没有返回值。(3)有原创 2021-11-19 09:52:48 · 108 阅读 · 0 评论 -
C++基础(1)
一.编译链接运行原理1.编译链接原理 (面试频率:中)1).预编译(生成.i文件)(1)将所有的“#define"删除,并且展开所有的宏定义;(2)处理所有条件预编译指令,比如:“#if","#ifend"(3)处理"#include"预编译指令,将包含的文件插入到该预编译指令的位置,这个 过程是** 递归的**,也就是说被包含的文件可能还包含其他文件(4)删除所有的注释(5)添加行号和文件名标识,以便于编译时编译器产生调用的行号信息及用于编译时产生 编译错误或警告时能够显示行号(6)保原创 2021-11-18 16:49:55 · 563 阅读 · 0 评论