C++
文章平均质量分 79
茉莉玫瑰花茶
天生我材必有用
展开
-
C++模板进阶
【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2024-08-25 22:52:24 · 359 阅读 · 0 评论 -
auto和范围for
(不过,对迭代器进行修改会改变原有对象的值,而范围for却没有修改原有对象的值)(因为范围for的底层变换成迭代器后,会自动取原有对象的数据,给到for对象,for对象仅仅是对原有数据的拷贝,相当于是个局部对象,出了作用域就被销毁了,并没有修改原有对象的数据;而迭代器是类似指针的,会修改原有对象)而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。谨慎使用:(有坑)EG:(不断调用才知道类型,效率低),自动迭代,自动取数据,自动判断结束;的底层很简单,容器遍历实际就是替换为。原创 2024-07-30 16:41:28 · 381 阅读 · 0 评论 -
C++模板(初阶)
注意:如果程序中除了函数模板,还有同名函数(调用传参实现),会优先调用这个同名函数(别人请客干嘛自己煮饭呢)注意:在模板中,编译器一般不会进行类型转换操作(隐式类型转换),因为一旦转化出问题,编译器就需要背黑锅;重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数;该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a1。st1,st2不是new出来的,不需要delete,出了局部域会调用析构函数。,对于模板函数的使用,原创 2024-07-28 14:43:01 · 901 阅读 · 0 评论 -
C/C++内存管理
new与delete原创 2024-07-26 21:16:19 · 716 阅读 · 0 评论 -
类和对象:完结
•静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不⾛构造函数初始化列表;原创 2024-07-22 16:05:17 · 793 阅读 · 0 评论 -
类和对象:类的6个默认成员函数
编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我 们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最 后两个取地址重载不重要, 其次就是C++11以后还会增加两个默认成员函数, 移动构造和移动赋值,这两个后面在说。• 第⼆:编译器默认⽣成的函数不满⾜我们的需求,我们需要⾃⼰实现,那么如何⾃⼰实现?默认成员函数,简单来说,就是我们不写,编译器会自动生成的一些函数,没有显示的实现。• 第⼀:我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。原创 2024-07-19 17:14:08 · 258 阅读 · 0 评论 -
类和对象:取地址运算符重载
取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,⼀般这两个函数编译器⾃动 ⽣成的就可以够我们⽤了,不需要去显⽰实现。• const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进⾏修改。const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const。• 将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后⾯;解决:(const修饰后不能修改)原创 2024-07-19 17:13:38 · 232 阅读 · 0 评论 -
类和对象:赋值函数
• 重载运算符函数的参数个数和该运算符作⽤的运算对象数量⼀样多,⼀元运算符有⼀个参数,⼆元运算符有两个参数,⼆元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第⼆个参数;3. 没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认的拷贝构造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型成员变量会调⽤他的赋值重载;• 重载++运算符时,有前置++和后置++,运算符重载函数名都是operator++,⽆法很好的区分,原创 2024-07-19 17:09:25 · 1458 阅读 · 0 评论 -
类和对象:拷贝构造函数
像Stack这样的类,虽然也都是内置类型, 但是_a指向了资源,编译器⾃动⽣成的拷⻉构造完成的值拷⻉/浅拷⻉不符合我们的需求,所以需要我们⾃⼰实现深拷⻉(对指向的资源也进⾏拷⻉)(也就是深拷贝)。6. 传值返回会产⽣⼀个临时对象调⽤拷⻉构造,传值引⽤返回,返回的是返回对象的别名(引⽤),没有产⽣拷⻉。⾃动⽣成的拷⻉构造对内置类型(构造函数:(初始化不确定)和析构函数:(不处理)对内置类型是不做处理的)成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型成员变量会调⽤他的拷⻉构造;原创 2024-07-19 17:01:00 · 480 阅读 · 0 评论 -
类和对象:析构函数
析构函数与构造函数功能相反,析构函数不是完成对对象本⾝的销毁,⽐如局部对象是存在栈帧的,函数结束栈帧销毁,他就释放了,不需要我们管,C++规定对象在销毁时会⾃动调⽤析构函数,完成对象中资源的清理释放⼯作。析构函数的功能类⽐我们之前Stack实现的Destroy功能,⽽像Date没有Destroy,其实就是没有资源需要释放,所以严格说Date是不需要析构函数的。6. 还需要注意的是我们显⽰写析构函数,对于⾃定义类型成员也会调⽤他的析构,也就是说⾃定义类型成员⽆论什么情况都会⾃动调⽤析构函数;原创 2024-07-19 16:51:58 · 263 阅读 · 0 评论 -
类和对象:构造函数
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时,空间就开好了),⽽是对象实例化时初始化对象。构造函数的本质是要替代我们以前Stack和Date类中写的Init函数(初始化)的功能,构造函数⾃动调⽤的特点就完美的替代的了Init。7. 我们不写,编译器默认⽣成的构造,对内置类型成员变量的初始化没有要求,也就是说是是否初始化是不确定的,看编译器。对于⾃定义类型成员变量,要求调⽤这个成员变量的默认构造函数初始化。原创 2024-07-19 16:49:26 · 281 阅读 · 0 评论 -
类和对象(深入)类的6个默认成员函数
C++中类和对象中的6大默认成员函数原创 2024-07-19 16:39:17 · 1078 阅读 · 0 评论 -
类和对象(启蒙)
•class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数(与结构体极为相似);•为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求;•。原创 2024-07-13 19:19:18 · 525 阅读 · 0 评论 -
inline与nullptr
笔记来喽~~~这是对上篇C++入门()的补充(这我就不放图了:大学牲~~~)原创 2024-07-12 17:05:17 · 919 阅读 · 0 评论 -
引用与指针的关系
C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有⾃⼰的特点,互相不可替代。sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。(点这里哈)的引用知识的补充~~~原创 2024-07-12 15:51:36 · 296 阅读 · 0 评论 -
C++入门
废话不多说,开始记笔记:(C++简单入门)C++总计63个关键字,C语言32个关键字 :(现在只需要过个眼熟便可)所需C++关键字:namespace { }C/C++规定:在同一个域中,不可以定义同名的东西。域的种类大概可以分为四种:1.函数局部域2.全局域3.命名空间域4.类域我们可以通过namespace来创造一个全新的域,也就是命名空间域以上面例子:(解决问题)(图中注释也是知识点的)但是,如果我们要一直用到域中的变量,那不得一直敲“ : : ”所以:想要用到域中的变量,其实有三种方法可以实现:1原创 2024-07-11 01:41:31 · 815 阅读 · 0 评论