- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++ 核⼼编程(⿊马程序员课程讲义)
本阶段主要针对C++⾯向对象编程技术
1. 内存分区模型
C++程序在执⾏时,将内存⼤⽅向划分为4个区域:
代码区:存放函数体的⼆进制代码,由操作系统进⾏管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器⾃动分配和释放,存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
内存四区的意义:不同区域存放的数据,赋予不同的⽣命周期,给予更⼤的灵活编程
1.1 程序运⾏前
在程序编译后,⽣成了exe可执⾏程序,未执⾏该程序前分为两个区域:
代码区:
存放CPU执⾏的机器指令(⼆进制)
代码区是共享的,共享的⽬的是对于频繁被执⾏的程序,只需要在内存中有⼀份代码即可(避免资源浪费)
代码区是只读的,使其只读的原因是防⽌程序意外地修改了它的指令
全局区:
全局变量和静态变量存放在此
全局区还包含了常量区,字符串常量和const修饰的全局变量(即全局常量)也存放在此(const修饰的局部变量,即局部常量,是和局部
变量放在⼀块)
该区域的数据在程序结束后由操作系统释放
总结:
· C++中在程序运⾏前分为代码区和全局区
· 代码区的特点是共享和只读
· 全局区中存放全局变量,静态变量,常量
· 常量区中存放了字符串常量和const修饰的全局变量
· 局部变量和const修饰的局部变量不在全局区(在栈区)
1.2 程序运⾏后
栈区:
由编译器⾃动分配释放,存放函数的形参、局部变量等
注:不要返回局部变量的地址,栈区开辟的数据由编译器⾃动释放
堆区:
由程序员分配释放,若程序员不释放,程序结束时由操作系统回收
在C++中主要利⽤new关键字在堆区开辟内存
总结:
· 堆区数据由管理员开辟和释放
· 堆区(⾃由存储区)数据利⽤new关键字进⾏开辟内存
1.3 new操作符
C++中利⽤new操作符在堆区开辟数据
堆区开辟的数据,由程序员⼿动开辟,⼿动释放,释放利⽤操作符delete
语法:new 数据类型
new 数据类型 告诉程序需要适合存储该数据类型的内存,然后它找到这样的内存,并返回其地址
1.4 delete运算符
使⽤delete时,后⾯要加上指向new分配的内存块的指针(即⽤于new的地址)
对空指针使⽤delete是安全
注意:⼀定要配对的使⽤new和delete,否则将发⽣内存泄漏。
总结:
使⽤new和delete应遵守的规则有( C++ Primer Plus P87):
· 不要⽤delete来释放不是new分配的内存
· 不要使⽤delete释放同⼀个内存块两次
· 如果使⽤new[ ]为数组分配内存,则应使⽤delete[ ]来释放
· 如果使⽤new为⼀个实体分配内存,则应使⽤delete来释放
· 对空指针使⽤delete是安全
2. 引⽤
2.1 引⽤的基本使⽤
作⽤:给变量起别名
语法:数据类型 别名 = 原名 ( 数据类型和原来的变量的类型是⼀样的)
引⽤也是地址的别名
引⽤的本质是⼀个指针常量,指针指向的值可以修改,但是指针指向的地址不能改变,占四个字节
2.2 引⽤注意事项
①引⽤必须初始化
②引⽤在初始化后,不可以改变(指针常量)
2.3 引⽤做函数参数(引⽤传递)
作⽤:函数传参时,可以利⽤引⽤的技术让形参修饰实参(C++Primer Plus P212)
优点:通过引⽤参数产⽣的效果同按地址传递是⼀样的,引⽤传递可以简化指针修改实参
2.4 引⽤做函数返回值
作⽤:引⽤是可以作为函数的返回值存在
⽤法:如果函数的返回值是引⽤,则这个函数调⽤可以作为左值
注意:不要返回局部变量引⽤ (C++Primer Plus P312)
2.5 引⽤的本质
本质:引⽤的本质在C++内部实现是⼀个指针常量
2.6常量引⽤
作⽤:常量引⽤主要⽤来修饰形参,防⽌误操作
在函数形参列表中,可以加const修饰形参,防⽌形参改变实参
3.函数提⾼
3.1函数默认参数
在C++中,函数的形参列表中的形参列表是可以有默认值
语法:返回值类型 函数名(形参 = 默认值){ }
注意:
①如果某个位置已经有了默认参数,那么从这个位置后,从左向右都必须有默认值
②如果函数声明有默认参数,函数实现就不能有默认参数(声明和实现只有⼀个能有默认参数)
3.2函数占位参数
C++中函数的形参列表⾥可以有占位参数,⽤来做占位,调⽤函数时必须填补该位置
语法:返回值类型 函数名 (数据类型){ }
3.3函数重载
3.3
原创力文档


文档评论(0)