![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 64
Dongliner~
陈柏宇……
展开
-
【C++11:右值(详细介绍)】
移动构造:复用其他对象中的资源,通俗易懂的说法就是夺舍,转移资源到其他对象上,在s和c对象的成员地址就可以看出,这俩对象的成员的地址一模一样,说明s的资源转移给了c,资源复用。总结:右值引用被推导或者传递之后,有可能就会变为左值属性,编译器会将已经命名的右值在传递过程中会被推导为左值,未命名的右值仍旧被推导为右值。右值引用的如果定义后没有使用,而是传递,编译器会把右值引用推导为一个左值引用。常量的左值引用是一个万能的引用方式,可以用一切的引用方式进行初始化。右值引用在一定程度上增加了程序的运行效率。原创 2024-07-28 21:08:49 · 376 阅读 · 0 评论 -
【C++11:异常】
当212行的异常被抛出,程序会重新返回函数func中,在函数中去寻找catch 语句的参数类型与抛出异常类型匹配,类型匹配上就能捕捉到异常。程序一次只能抛出一个异常,抛出完异常后,程序不会向下执行。要执行213行的抛异常需要屏蔽212的抛异常。如果throw中的括号没有指定任何类型,就说明该函数不允许抛出任何异常,也可以用。函数名后面没有throw()时,表示该函数能抛出任意类型的异常。也可以在函数中抛出指定类型的异常,格式如下。原创 2024-07-28 11:26:46 · 134 阅读 · 0 评论 -
【C++:默认成员函数】
构造函数是一个特殊的成员函数注:无参构造函数在实例化时,不需要增加(),原因:会与函数声明混淆无参和有参的构造函数不能同时存在,原因:调用会存在歧义构造函数如果自己写了,那么编译器就不会自动生成,以下就是自己写了构造函数,编译器没有自动生成,导致定义的对象找不到对应的构造函数出现的错误构造函数对于内置类型不做处理(一般是随机值),自定义类型会调用它对应的构造函数(如果自己显式定义,编译器会自动生成无参构造函数)原创 2024-07-06 18:56:14 · 252 阅读 · 0 评论 -
【C++:类的基础认识和this指针】
实例化的对象中,每一个对象只存储他们的成员变量,成员函数存储在公共区域(代码区),这种方式的存储减少了空间浪费。声明和定义分离时,有可能两个类中会有相同的函数,所以,在函数名那里加入类名就可以避免此冲突。如果一个类中没有成员变量,该类的大小为1字节,而不是0字节,这里大小给1字节的原因是标志该类的存在。4.this指针存放在栈上,This指针是一个形参,形参在栈上存储。1.不可以在成员函数形参或者实参那里显示写,会报错。this指针是类中成员函数的第一个隐含的参数。类同样遵守内存对齐的规则。原创 2024-07-06 18:56:30 · 211 阅读 · 0 评论 -
【C++:内联】
代码量比较大且频繁调用的函数使用内联会导致代码膨胀(举个例子:本来是五行代码,使用内联函数直接增加了大量的代码行),影响程序的运行效率。一个函数是内联函数,就会在调用该函数时,直接把函数执行的指令展开,如果不是内联函数,在调用函数时会将call函数的地址。同一个函数在两个文件中重复包含导致的链接问题,采用以下三种方式可以解决该问题。大函数考虑1,2方法,小函数考虑inline。正确的使用内联能有效的提高程序运行的效率。用inline修饰的函数叫做内联函数。auto不能作为参数,也不能定义数组。原创 2024-07-06 10:27:05 · 230 阅读 · 0 评论 -
【C++11:右值引用,列表初始化】
构造函数的函数名与函数体之间增加一个列表,用于对成员初始化在实例化对象时,支持单/多参数的隐式转化,同时也可以省略=符号,让代码更简洁。原创 2024-07-01 21:40:30 · 363 阅读 · 0 评论 -
【C++:list】
list中的原生指针并不能满足迭代器的需要(迭代器需要通过++或者--的操作符对链表进行遍历)于是重新写一个关于迭代器的类,重载操作符,完善迭代器的需求。链表的空间并不是连续的,如果对原生指针进行++操作并不会拿到下一个节点的地址,于是封装一个类,重载运算符。重载操作符来管理迭代器的行为。疑问:重载运算符咋个重载?原创 2024-06-27 22:46:41 · 479 阅读 · 0 评论 -
【C++:哈希】
小例子:手机通序录对联系人的分配,通讯录根据人名的首字母对联系人进行分类存储。这种就是哈希存储。通序录通过名字的首字母与联系人之间产生一种映射关系。原创 2024-06-24 17:47:06 · 695 阅读 · 0 评论 -
【map:基础用法与细节注意】
map和set是一个关联容器,不仅仅是存储数据还能查找数据,存储的数据和数据之间关联很强。原创 2024-05-20 17:49:10 · 325 阅读 · 0 评论 -
【STL:容器适配器&&仿函数】
第21行:deque<T>是类型,将该类实例化,然后赋给container,container的地位就相当于T,这里给缺省值,如果没有传容器适配器的类型就默认类型为deque, 多增加的这种接口叫做容器适配器。仿函数别名函数对象,重载了一个()让它在使用时像极了函数调用。为了让仿函数使用起来很像函数调用以及复用,这里用类封装了它的()重载。容器适配器可以理解为插头的转换器,容器适配器。栈和队列的实现不用vector和list是因为两者的缺点,而deque 则是二者的嫁接成果。原创 2024-05-12 10:17:26 · 198 阅读 · 0 评论 -
【STL:string的基础介绍及使用】
string是一个表示字符串类的对象,而string类负责维护着string类型的字符串,用户只需要用string对象对数组进行维护。此外,string的成员是私有的,因此用户在使用时并不能访问到string类中的成员,string能实现的功能很多,基础的有对字符串的增删查改,也能对获取都短字符串的某个字符,所以string也支持访问某个单个的元素。原创 2024-05-01 23:00:37 · 16 阅读 · 0 评论 -
【C++:new,delete】
在C语言中,malloc失败会返回一个NULL指针,但C++为了符合面向对象的特性,于是让new的底层为一个operator new,而operator new这个函数封装了malloc和空间开辟失败抛异常。delete的底层也是封装了一个free。此外,还需要知道new和delete的底层是由operator new和operator delete在底层被调用,他们是全局函数,operator new 封装了一个malloc函数,而operator delete封装了一个free函数。原创 2024-05-01 10:04:23 · 239 阅读 · 0 评论 -
【C++:类与对象】
关键字:class没有成员对象的类大小为1字节,对象实例化的标志是开辟空间,这里的1字节恰好是为了证明该类对象的存在。面对对象的三大特性:封装,继承,多态。原创 2024-04-27 21:53:06 · 230 阅读 · 0 评论 -
【C++:引用】
引用简单来讲就是给对象取别名,例如:李逵外号黑旋风,黑旋风就是李逵的别名。引用不会重新开辟空间,与之前的对象存储同一个空间。原创 2024-04-22 14:38:43 · 231 阅读 · 0 评论 -
【C++:多继承,虚拟继承】
一个子类同时拥有多个父类叫做多继承。但多继承同时也引来了菱形继承。原创 2024-04-17 16:11:14 · 204 阅读 · 0 评论 -
【C++:模板,特化,按需实例化】
模板的声明与定义可分离,但不支持分离在俩个文件中。当模板的声明与定义分离时,编译器在编译阶段只会查看调用的函数参数,名字是否匹配,在连接时,会出现连接错误,原因就是编译器找不到该函数的地址。只有实例化才会生成对应的函数,函数没有成功生成,就找不到地址。原创 2024-04-14 13:32:42 · 269 阅读 · 0 评论 -
【C++:继承】
如果子类定义了与父类同名的成员,该成员优先在子类中查找,子类成员会屏蔽父类对同名成员的直接访问,这叫做隐藏,也叫重定义。相同属性的复用,这里引入两个新名词,子类与父类, 每个类都含有父类,父类也叫做基类,子类继承父类的属性,同时含有父类不具备的属性,子类也叫做派生类。父类对子类引用:直接把子类中父类的那部分分割出来取别名,以下演示就可以得到证明,引用是父类是子类切割出来的。原因:(1)子类构造会自动调用父类构造,父类中缺少子类的一些属性,如果用父类初始化子类有可能有属性没有被初始化。原创 2024-04-12 23:26:33 · 227 阅读 · 0 评论