自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 C++中的深、浅拷贝

我们将上面的string类进行改进,加上我们自己定义的拷贝构造函数。

2023-02-12 13:04:12 170

原创 STL中的string类

string类是basic_string模板类的一个实例,虽然大多数时候我们使用的string类型都是用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数,但是考虑到。的问题,除了char还有wchar_t(两字节)、char16_t、char32_t等,所以string也只是basic_string模板类的一个实例。string在底层实际是basic_string模板类的别名。string类对象的遍历。

2023-02-11 20:41:20 199

原创 C++中的函数模板和类模板

模板函数不允许自动类型转换,但普通函数可以进行自动类型转换。

2023-02-10 21:52:13 261

原创 定位new表达式

定位new表达式在实际中一般是配合内存池使用**。因为内存池分配出的内存没有初始化,所以如果是自定义类型的对象,需要使用new的定义表达式进行显示调构造函数进行初始化new (place_address) type或者new (place_address) type(initializer-list)析构函数是可以显式调用的。

2023-02-10 19:30:37 210

原创 operator new与operator delete函数

operator new/delete就是对malloc和free的封装,operator new中调用malloc申请内存,失败的话就会抛出异常,这样符合c++面向对象的错误处理方式。

2023-02-10 19:11:35 162

原创 C++的内存管理方式new/delete

new/delete和malloc/free不要混着用,一定要匹配new和delete会调用构造函数和析构函数new失败之后会抛异常delete和delete[]也是不一样的,如果new的时候使用的是new[] 那么delete就要使用delete[],如果使用delete就只会调用一次析构函数从而导致错误,即便是new[1],也要使用delete[],而不是delete如果一个自定义类型的类中没有默认构造函数,那么使用new的时候就会报错,除非在使用new的时候就给初始值,这也是可以的。

2023-02-10 17:23:35 179 1

原创 C/C++的内存分布

注意字符串数组和常量字符串的区别栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信堆用于程序运行时动态内存分配,堆是可以上增长的数据段–存储全局数据和静态数据代码段–可执行的代码/只读常量。

2023-02-10 15:25:06 64

原创 详解C++赋值重载函数

构造函数和析构函数的处理机制基本是一样的拷贝构造和负值重载函数的处理机制基本是一样的用户没有显式实现赋值重载时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝(也就是浅拷贝) ,对于内置类型成员变量是字节序的值拷贝,而自定义类型成员变量需要调用对应类的赋值运算符,其实这个和类的拷贝构造函数一样赋值运算符只能重载成类的成员函数不能重载成全局函数,赋值运算符如果不显式实现,编译器会生成一个默认的。

2023-02-08 15:12:48 431 1

原创 初识c++中的运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似函数名字为:关键字operator+需要重载的运算符符号。返回值类型 operator操作符(参数列表)例如:对于一个日期类型,我们想用"-“求两个对象之前的天数差值,但是会发现编译器报了下图这个错误,这是因为这个类使我们自己定义的,这个对象的类型不是内置类型,默认情况下c++是不支持自定义类型对象使用运算符。

2023-02-08 14:28:50 125

原创 详解C++中的拷贝构造函数

编译器默认生成的拷贝构造函数对内置类型和自定义类型都会处理默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝类中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请时,则拷贝构造函数是一定要写的,否则就是浅拷贝拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用为了提高程序效率,一般对象传参时,尽量使用引用类型,返回时根据实际场景,能用引用尽量使用引用。

2023-02-08 12:06:44 398

原创 详解C++中的析构函数

析构函数和构造函数类似,对于内置类型不做处理,对于自定义类型会去调用它的析构函数,因此如果我们不写析构函数,但是对象存在动态开辟空间的行为,并且我们想释放这块开辟的空间,那么就会造成内存泄漏但是仔细想一下,如果我们的对象成员变量中存在指针,但如果他是一个文件指针或者一个迭代器,那么我们就希望调用析构函数不会将其置空,所以析构函数到底释放哪些资源应该由我们自己决定。

2023-02-08 10:40:51 3795

原创 详解C++中的构造函数

C++编译器默认生成的构造函数设计得不好,它没有对内置类型和自定义类型统一处理,它不会处理内置类型成员变量,只处理自定义类型成员变量说白了就是,对象在定义使会调用构造函数,对于内置类型来说 有没有默认构造函数都可以,但是对于自定义类型来说,如果没有默认构造函数就会报错,不管这个默认构造函数是你自己定义的还是编译器自动生成的 如果你自己写了那么编译器就不会生成了,但是如果你写的构造函数一定需要参数才可以调用(也就是说他不是默认构造函数),那么编译器就会报错 而所谓的。

2023-02-07 22:56:45 1156

原创 详解C++中的nullptr(C++11)

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的.在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

2023-02-07 18:17:49 646 1

原创 详解c++中的auto与范围for

使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

2023-02-07 17:03:12 1364

原创 详解C语言中的移位操作符(顺带复习原码反码补码)

对于左移, 不论正负,高位舍弃,低位统一补0对于右移,正、负整数的低位处理规则相同,但是正数的高位补0,负数的高位补1在左移、右移得到结果之后,如果符号位是0,说明是正数,那么结果就是我们要求的值,如果最高位是1,说明是负数,我们还需要求得到结果的原码,原码对应的值才是我们要求的值右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0,或者补符号位,这由不同的机器而定,我们讨论的是补符号位对于移动的位数 我们都使用正数,不要使用负数。

2023-02-07 12:53:19 768 4

原创 一篇文章带你看懂C++中的命名空间

在我们写c++项目的时候自己会定义许多的变量、函数和类,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,就上面的例子中,qz就是命名空间的名字 然后接一对{}即可,{}中即为命名空间的成员,可以是数据类型 结构体 类 函数…如果我们想要上面的M命名空间中的c,那么我们在访问的时候就。

2023-02-02 16:54:24 122

原创 C语言学习——循环语句之while、for、do...while

循环语句 主要包括while循环 for循环和do…while()循环。

2023-01-09 10:19:42 705

原创 C语言学习——分支语句之switch语句

C语言是结构化的程序设计语言主要包含三个结构 也就是顺序结构、选择结构、循环结构C语言中的语句可以分为以下五类1.表达式语句2.函数调用语句3. 控制语句4. 复合语句5. 空语句本篇文章主要介绍控制语句控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句条件判断语句也叫分支语句:if语句、switch语句;循环执行语句:do while语句、while语句、for语句。

2023-01-08 11:01:41 712 1

原创 C语言学习——分支语句之if语句

C语言是结构化的程序设计语言主要包含三个结构 也就是顺序结构、选择结构、循环结构C语言中的语句可以分为以下五类1.表达式语句2.函数调用语句3. 控制语句4. 复合语句5. 空语句本篇文章主要介绍控制语句控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句条件判断语句也叫分支语句:if语句、switch语句;循环执行语句:do while语句、while语句、for语句。

2023-01-08 10:25:40 939

原创 c语言学习———关键字和结构体

C语言中常见的关键字和初识结构体autotypedef类型重命名static静态变量static修饰函数宏二.结构体结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。这里只能使用结构体来描述了。

2022-12-07 22:00:09 112

原创 一篇文章带你了解C语言的指针

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。内存划分的取余大致可以分为 栈区、堆区、静态区变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的内存变量的编号就是地址 地址又叫做指针编号 == 地址 == 指针1.个内存单元多大比较合适?一个字节地址的产生:32位机器

2022-12-07 21:38:21 334

原创 C语言学习——初识C语言(2)

C语言中的常量和变量的定义的形式有所差异。C语言中的常量分为以下以下几种:例如2.const 修饰的常变量为什么叫常变量的,因为它具有常量的属性 不可被修改但是!!它本质还是一个变量所以!!num虽然被const修饰 具有了常属性 不能被修改 但本质上还是变量 不能放在数组的[]中但是 这个代码在支持C99的编译器上是可以编译的只是我们的VS不支持c99中的变量数组C99中引入了变长数组的概念:变长数组的大小是可以使用变量来指定的,但是数据不能初始化Linux系统中的gcc

2022-12-03 17:14:21 421

原创 【无标题】

算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。举几个例子:比如排序,查找,去重…也就是给一组数据输入,经过处理后得到我们想要的一组输出比如在淘宝搜索一个商品,我么可以按照价格升序排序,也可以降序排序,还可以按照其他要素进行排序。

2022-12-02 18:03:19 62

原创 C语言学习——与文件操作相关函数fread和fwrite

与文件操作相关的二进制读写函数fread和fwrite

2022-11-30 23:50:02 649

原创 C语言学习——初识C语言(1)

我们知道,计算机最底层是各种硬件,硬件之上是操作系统,想让硬件工作就需要操作系统,而操作系统就是通过调用驱动层和硬件交互。在操作系统之上我们可以安装很多应用软件(也叫上层软件),在操作系统之下一般叫做底层软件,c语言擅长的就是底层软件的开发,但这并不代表它不能进行上层开发。c语言在嵌入式,单片机开发中用的很多,进来两三年物联网的兴起又让c语言迎来了一次春天。以下是对C语言的一些简单介绍C语言是一门通用计算机编程语言,广泛应用于底层开发。

2022-11-30 22:41:10 723 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除