自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 string使用

目录1.string的遍历补充:at2.容量相关(1)reserve(2)resize(3)其他(不完整)3.插入数据(1)append与+=(2)insert4.erase与replace5.find系列先总结:一个类他的函数成员,函数方法很多,实现很复杂,需要的时候去查文档,记是记不住的,下面有一个查文档的网站string::data - C++ Reference

2024-05-16 19:13:43 270

原创 #初阶模板

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟,然后将实例化的类型放在 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

2024-05-13 17:23:00 321

原创 C++内存管理

new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请2. 在申请的空间上执行N次构造函数delete[]的原理。

2024-05-11 21:16:34 954

原创 #内部类#

如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。1.B类始终是声明在A类里面的,所以虽然B类是独立于A类之外的,但在定义B类的时候,依然要突破A类域。2.B类是A类的内部类,B是可以去访问A类的成员变量的,static变量与普通成员变量都可以。(2)注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。

2024-05-09 19:04:07 190

原创 #友元函数与友元类

在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time 类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声 明,声明时需要加friend关键字。如果一个类A是另一个类B的友元,则A里面的成员函数都可以去访问B里面的私有成员变量。2.友元关系不能传递 如果B是A的友元,C是B的友元,则不能说明C时A的友元。1.友元函数可访问类的私有和保护成员,但不是类的成员函数。

2024-05-09 17:21:44 228

原创 static成员

如图,因为被s。

2024-05-09 16:26:00 445

原创 #匿名对象

平时是先创建一个有名对象,通过有名对象去传参,因为自定义类型在C++中函数参数传递,在函数调用前,调用类里面的函数需要创建一个类,但是只为了调用函数创建一个多余的类也不合适,用匿名对象。但是只是为了传参就生成一个对象有点不合适,所以我们可以用。C++规定自定义类型传值传参必须用拷贝构造函数去完成。传参之后匿名对象也就会被释放。假如我们有一个类,类型名为A。,防止浅拷贝出现问题,

2024-05-08 15:14:14 197

原创 #初始化列表

的地方。2.先走初始化列表(初始化),再走函数体(赋值)。3.不管写不写,每个成员都要走初始化列表。及我们会在初始化列表中去初始所有的成员,对于自定义类型的成员,会去调用它的默认构造函数,对于内置类型不做处理,所以能用初始化列表就用初始化列表。4.初始化列表走的顺序只与。

2024-05-06 15:41:21 545

原创 类的流插入与流提取

为什么内置类型可以直接使用流插入与流提取?其实本质上是人家已经写好了相关的函数,内置类型可以直接调用cout与cin对于自定义类型,我们需要自己写相关的函数。

2024-05-06 13:56:32 294

原创 取地址及const取地址操作符重载

一般不用重新定义 ,编译器默认会生成。

2024-04-28 20:11:01 198

原创 #const成员

这个时候我们去构建一个const Date,如下,这是不和法的,为什么呢?基于写的日期类的实现,去分析const成员的问题。,之前就说了,权限可以缩小,平移,但不能放大。所以在这后面加个const就可以了。需要用到下面的两个函数。

2024-04-28 14:59:10 154

原创 Date类的实现

目录1.Date.h2.Date.c

2024-04-27 15:15:36 144

原创 #运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。关键字operator后面接需要重载的运算符符号。函数原型:返回值类型 operator操作符(参数列表)注意!1.不能通过连接其他符号来创建新的操作符:比如operator@2.重载操作符必须有一个类类型参数,用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。下面这个的参数就至少要有一个类类型参数。

2024-04-26 14:44:27 290

原创 #拷贝构造

默认生成的会出问题。

2024-04-26 13:21:18 244

原创 #析构函数

若未显式定义,系统会自动生成默认的析构函数。注意:析构,函数不能重载。,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。而对象在销毁时会自动调用析构函数,完成。像自定义类型的析构函数和构造函数还是需要我们自己写,然后编译器会去自动调用。如果我们自定义类型没有写析构函数,就会报错。这里和我们构造函数是一样的。就需要写析构函数,因为空间是malloc来的,在堆上,需要我们手动释放。如果我们不写析构函数,编译器会自己生成一个析构函数。,成员变量出了作用域就自动销毁了。4.自动生成析构函数。

2024-04-26 11:14:53 406

原创 #构造函数

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。构造函数的主要任务是初始化对象。

2024-04-25 17:07:26 638

原创 #this指针#

为什么它的d1.Print()知道去调用d1里面的成员变量,而没有去调用d2里的成员变量呢?我们的Print函数又是放在的公共代端,所以其实这里的Print函数隐藏了一个参数,具体如下。,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递。,即成员函数中,不能给this指针赋值。

2024-04-24 21:30:57 381

原创 类的实例化

用类类型创建对象的过程,称为类的实例化。1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它;因为person类是没有空间的,只有person实例化出的对象才有年龄。类就像是现实生活中建造房子的图纸,只是一种设想。并不占用实际的空间。类域里面的成员变量是声明,不是定义。声明是还没有实现的承诺,承诺实现了就是定义。

2024-04-24 20:47:57 162

原创 类的初步认识与应用

类体中的内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式1.声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2.类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::一般情况下,多采用第二种定义方式,感觉和普通函数的声明和定义分离很像。C++中类的定义可以用struct与class,但是它们其实是有区别的,和访问限定符有关。

2024-04-24 18:49:43 491

原创 基于范围的for循环

对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因 此C++11中引入了基于范围的for循环。注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。对于类而言,应该提供 begin和end的方法,begin和end就是for循环迭代的范围。对于数组而言,就是数组中第一个元素和最后一个元素的范围;注意:以上代码就有问题,因为for的范围不确定。2. 迭代的对象要实现++和==的操作。2.范围for的使用条件。1.范围for的语法。

2024-04-24 17:06:46 245

原创 auto关键字使用细则

在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。auto关键字在编译的时候,系统会自动识别类型,typeid().name是一个输出对象类型的语句。,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。std::map::iterator 是一个类型,但是该类型太长了,特别容易写错。auto和auto*没有任何区别,但用auto声明引用类型时则必须 加&1. auto与指针和引用结合起来使用 用auto声明指针类型时,用。类型声明时的“占位符”

2024-04-24 16:43:55 254

原创 #内联函数#

2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建 议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不 是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。inline函数在release的模式下会在使用了内联函数的地方展开,会用函数体替换函数的调用,这里和宏是类似的,但不是整个函数体一字不差的替换。当内联函数是递归函数,或者函数内容太多,编译器会忽略内联特性。inline关键字是用来定义内联函数的。

2024-04-23 09:52:55 390

原创 #C++里的引用#

注意!!引用类型必须和引用实体是同种类型的。同时,这里还存在符号多用的情况:&在其他其他地方是取地址,在这里就是:类型&引用变量名(对象名)=引用实体int a = 10;//

2024-04-21 18:58:09 239 1

原创 #函数重载#

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。上面两个函数的名字相同,但参数不同,可以实现类似的功能,这就是重载函数。编译器会根据参数的类型,个数,顺序来自动识别应该使用哪一个函数,使用重载函数的哪一个功能。1.要求构成重载,需要函数名相同,参数不同,包括个数不同,顺序不同,类型不同,顺序不同指的是数据的类型顺序不同。4.在不同的域里面不构成函数重载,如下。

2024-04-20 20:38:51 189

原创 #缺省参数#

2.缺省参数不能在函数声明与定义中同时出现,缺省参数在给默认值的时候在函数声明的时候给出,这主要是怕我们声明与定义给的默认参数值不一样。3.缺省值必须是常量或者全局变量,就是说默认的值必须是常量或者全局变量。1.半缺省必须从右到左依次来给出,不能间隔着给。,不能跳过第一个参数不传,直接传第二个参数。全缺省,只有部分的参数有默认的值。即使使用的人不传参数,参数也有一个默认值。对于上面的结果如下,这里需要注意一点,全缺省,即所有的参数都有默认的值。传参的时候必须从左到右显示传参。传了参数以传过去的参数为主。

2024-04-20 20:02:55 201

原创 #命名空间

学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。他去命名空间里面去找,这个时候哪怕全局空间里面有与命名定义域内相同命名的函数Add,但是编译器找到的是命名空间里面的Add。上面这个语句可以将filed这个域全部展开,展开之后,域里面定义的各种,则可以不通过::直接访问。感觉展开之后,命名空间域里面的各种定义和在全局空间中的定义就没有什么使用上的区别了。下面的名字相同的两个域会合并,其实就相当于一个域,所以会产生下面的重定义的错误。可以嵌套,空间域里面套空间域。

2024-04-20 19:34:41 325

原创 *初阶指针*

2.p++,指针加1,指针指向的地址会跳过一个arr(int* p =arr)大小,即4个字节,会指向下一个元素,这里数组里面的值依次打印。char* (指向字符的指针) ) int* (指向整型的指针) 函数指针(指向函数的指针)等。:在不同平台上指针大小不同,在同一平台上,不同类型的指针大小相同。1.p+5指向arr中的6,p+3指向arr中的4。指针未定义,指针越界访问,指针指向的空间释放。,地址在C语言中叫做指针,平时说的指针是。&a得到的是a的地址,本质上是a的。引用的时候的步长大小。

2024-03-08 21:34:57 168 1

原创 整型提升与算数转换

1.隐式c的整型运算总是以缺者整型的类型(默认int型)进行计算的2.操作符的各个操作数属于不同类型时要转换成一个类型。

2024-01-19 21:41:07 457 1

原创 冒泡排序与数组调用的联合

2.冒泡排序是相邻两个数的排序,如图是一趟冒泡排序,数组元素个数为7的一趟冒泡排序会比较6次,同时会确定一个数的位置,下一趟冒泡排序就只需要比较6个数,即下一趟冒泡排序会比较5次,再次确定一个数的位置,依次递减。3.接受数组地址的形参可以用指针表示,也可以用数组表示。1.数组为参数的调用注意要调用整个数组的&+数组名。

2024-01-10 18:40:12 342

原创 数组名的学问

当数组名作为sizeof参数时,计算的是整个数组大小。解析:如上图,68(8*16^0+6*16^1=个字节,刚好是arr1的字节长,所以。1.数组名表示数组首元素地址。2.sizeof意外。

2024-01-10 17:08:39 520

原创 被冷落的条件操作符

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。条件操作符也叫三⽬操作符,需要接受三个操作数。

2023-12-27 19:52:42 353 2

原创 Printf() 限定最小宽度

6.2f 表⽰输出字符串最⼩宽度为6,⼩数位数为2。(2)至少显示宽度,向右对齐。(1)加正好总是显⽰正负号。2.至少显示宽度,向左对齐。与限定宽度占位符,结合使⽤。限定值,都可以⽤ * 代替。

2023-12-27 19:25:57 681 1

原创 sizeof与strlen函数不同

1.计算类型或者变量⼤⼩(对象或类型所占的。strlen 函数用来求字符串的长度(包含。中C语⾔是⼀个关键字,也是一个运算符。2.也可以计算数组的⼤小(数组中。sizeof和strlen。

2023-12-14 11:23:53 29 1

原创 C语言判断两个字符串相等

#新手#参数 str1 和 str2 是参与比较的两个字符串。strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不一样的字符,或者到达字符串末尾(\0)在C语言标准库里没有规定返回值是多少,在大多数编译器里采用这两种情况。等于0:表示str1的ASCII码的等于str2。大于0:表示str1的ASCII码大于str2。小于0:表示str2的ASCII码大于str1。

2023-12-13 20:14:00 1875 2

原创 函数调用的类型

形参是实参的临时拷贝,对形参的修改不会影响到实参,及对x,y的修改不会影响我们a,b的值,所以a,b不会交换。1.这里的x,y为形式参数,在被调用前不会分配具体存储地址,只有在调用时形参才会拥有临时地址,调用完后会销毁。使用传址调用时,传给x,y的是我们a,b的地址,函数就可以通过寻址的方式去交换我们的a,b;2.这里的a,b为实参,实际我们输入的具体数值。传值调用,但是a,b,的值不会被交换。

2023-12-10 19:36:28 363

原创 库函数与⾃定义函数

新手-#C库函数与自定义函数

2023-12-10 17:34:47 36 2

原创 C语⾔数据类型

所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间。

2023-12-06 16:09:11 16 1

原创 C语⾔常⻅概念

在计算机中所有的数据都是以⼆进制的形式存储的,给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为 了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C 语⾔中的字符就遵循了 ASCII 编码的⽅式。这是 C99 标准新增的语法。空语句,⼀般出现的地⽅是:这⾥需要⼀条语句,但是这个语句不需要做任何事,就可以写⼀个空语 句。在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'。

2023-12-06 15:12:16 21 1

空空如也

空空如也

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

TA关注的人

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