欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C++-primer-(初学者可看笔记).pdf

    • 资源ID:72841794       资源大小:2.77MB        全文页数:30页
    • 资源格式: PDF        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++-primer-(初学者可看笔记).pdf

    C+-primer-(C+-primer-(初学者可看笔记初学者可看笔记)C+primerC+primer第一章第一章快速入门快速入门学习了一个学习了一个 c+c+程序最基本的框架,和如何完成程序最基本的框架,和如何完成一个完整的程序编程。一个完整的程序编程。了解已初始化和未初始化变量的区别。了解已初始化和未初始化变量的区别。初始化是初始化是一个很重要的概念,贯穿了一个很重要的概念,贯穿了 c+c+始终。始终。在程序变的很复杂之前学会做好注释,在在程序变的很复杂之前学会做好注释,在 c+c+中中使用使用/表示注释内容。表示注释内容。初步接触了初步接触了 whilewhile 语句,语句,forfor 语句,语句,ifif 语句。语句。WhileWhile 语句提供了迭代执行功能。语句提供了迭代执行功能。whilewhile(conditioncondition)while_body_statement while_body_statement;ForFor 语句可以简化管理循环变量的代码。语句可以简化管理循环变量的代码。forfor(一个初始化语句,一个条件,一个表达式一个初始化语句,一个条件,一个表达式);IfIf 语句用来转折编程。语句用来转折编程。if(condition)if(condition)else ;else ;类机制是类机制是 c+c+中最重要的特征之一,我们通过定中最重要的特征之一,我们通过定义类来定义自己的数据结构。义类来定义自己的数据结构。需要注意的是标准需要注意的是标准库的头文件用尖括号库的头文件用尖括号括起来,括起来,而像自定义的类而像自定义的类这种非标准库的头文件用双引号“”括起来。这种非标准库的头文件用双引号“”括起来。类类可以执行很多操作符,例如可以执行很多操作符,例如+=+=。第二章第二章变量和基本类型变量和基本类型(1 1)基本内置类型:表示整数,字符,和布尔)基本内置类型:表示整数,字符,和布尔值的算术类型合称整型。除了值的算术类型合称整型。除了 boolbool 型外的整型型外的整型又分带符号和无符号类型。类型又分带符号和无符号类型。类型 floatfloat,doubledouble和和 longlong doubledouble 都是浮点型。单精度浮点型只能都是浮点型。单精度浮点型只能保证保证 6 6 位有效数字,而双精度可以保证位有效数字,而双精度可以保证 1010 位有位有效数字。效数字。(2 2)字面值常量:整型字面值规则,可以是使)字面值常量:整型字面值规则,可以是使用十进制,八进制,十六进制。浮点字面值规则用十进制,八进制,十六进制。浮点字面值规则可以用十进制或者是科学计数法来表示浮点字可以用十进制或者是科学计数法来表示浮点字面值常量。面值常量。BoolBool 字面值和字符字面值是字面值和字符字面值是 truetruefalsefalse。字符串字面值常量用双引号括起来的零。字符串字面值常量用双引号括起来的零个或者多个字符表示。个或者多个字符表示。多行字面值可以再一行的多行字面值可以再一行的末尾家一反斜杠符号可将此行和下行当做一行末尾家一反斜杠符号可将此行和下行当做一行处理。处理。(3 3)变量:变量是提供了程序可以操作的有名)变量:变量是提供了程序可以操作的有名字的存储区。字的存储区。而变量名是变量的标识符。而变量名是变量的标识符。可以由可以由字母,字母,数字和下划线组成。数字和下划线组成。变量名必须是由字母变量名必须是由字母或者下划线开头的,并且区分大小写。或者下划线开头的,并且区分大小写。(4 4)constconst 限定符:定义限定符:定义 constconst 对象是把一个对象是把一个对象转化成一个常量。对象转化成一个常量。因为常量在定义后不能被因为常量在定义后不能被修改,所以定义是必须初始化。修改,所以定义是必须初始化。(5 5)引用:引用就是对象的另一个名字,是一)引用:引用就是对象的另一个名字,是一种复合类型,通过在变量名前添加“&”符号来种复合类型,通过在变量名前添加“&”符号来定义。定义。(6 6)typedeftypedef 名字:名字:typedeftypedef 可以用来定义类型可以用来定义类型的同义词。一般使用的同义词。一般使用 typedeftypedef 有三种目的,有三种目的,1.1.为了隐藏特定类型的实现,强调使用类型的目为了隐藏特定类型的实现,强调使用类型的目的。的。2.2.简化复杂的类型定义,使其更易理解。简化复杂的类型定义,使其更易理解。3.3.允许一种类型用于多个目的,允许一种类型用于多个目的,同时使得每次使用同时使得每次使用该类型的目的明确。该类型的目的明确。(7 7)枚举:)枚举:enumenum 枚举类型名枚举类型名 枚举成员枚举成员 1 1,枚,枚举成员举成员 2 2;(8 8)类类型:类类型:c+c+中通过定义类来自定义数据类中通过定义类来自定义数据类型。型。类定义了该类型的对象包含的数据和该类型类定义了该类型的对象包含的数据和该类型的对象可执行的操作。的对象可执行的操作。定义了一关键字定义了一关键字 classclass 开开始,始,其后是该类的名字标识符。其后是该类的名字标识符。类体位于花括号类体位于花括号里面,花括号后,面必须要跟一个分号。里面,花括号后,面必须要跟一个分号。第三章第三章标准库类型标准库类型1.1.命名空间的命名空间的 usingusing 声明:声明:使用使用 usingusing 说明就可说明就可以在不需要加前缀以在不需要加前缀 namespace_namenamespace_name:的情况下:的情况下访问命名空间中的名字。如果在头文件中放置访问命名空间中的名字。如果在头文件中放置usingusing 声明,就相当于在包含该头文件的每个程声明,就相当于在包含该头文件的每个程序中都放置了同一序中都放置了同一 usingusing 声明,声明,不论该程序是否不论该程序是否需要需要 usingusing 声明。声明。2.2.标准库标准库 stringstring 类型:类型:string string 类型支持长度类型支持长度可变的字符串,标准库可变的字符串,标准库 stringstring 类型的目的就是类型的目的就是满足对字符串的一般应用。满足对字符串的一般应用。3.3.标准库标准库 vectorvector 类型:类型:vectorvector 是同一种类型的是同一种类型的对象的集合,对象的集合,每个对象都有一个对应的整数索引每个对象都有一个对应的整数索引值,我们一般把值,我们一般把 vectorvector 称作容器。称作容器。vectorvector 是是一个类模板。一个类模板。使用模板可以编写一个类定义或函使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。数定义,而用于多个不同的数据类型。4 4 标准库标准库 bitsetbitset 类型:标准库提供的类型:标准库提供的bitsetbitset 类类简化了位集的处理。类似于简化了位集的处理。类似于 vectorvector,bitsetbitset 类类是一种类模板,是一种类模板,而与而与 vectorvector 不同的是不同的是 bitsetbitset 类类型对象的区别仅在其长度而不在其类型。型对象的区别仅在其长度而不在其类型。第四章第四章语句语句1.if1.if 语句:语句:if if 语句根据特定表达式是否为真语句根据特定表达式是否为真来有条件的执行另一语句。来有条件的执行另一语句。IfIf 语句有两种形式,语句有两种形式,一种有带一种有带 elseelse 分支,而另一种则没有。分支,而另一种则没有。2.switch2.switch 语句:语句:switchswitch 语句提供了一种更方便语句提供了一种更方便的方法来实现深沉嵌套的的方法来实现深沉嵌套的 if/elseif/else 逻辑。在逻辑。在switchswitch 语句中,漏写语句中,漏写 breakbreak 语句是常见的程序语句是常见的程序错误。但是错误。但是breakbreak 语句,也要慎用,并不是总是语句,也要慎用,并不是总是恰当的。在恰当的。在 switchswitch 语句中,语句中,defaultdefault 标号提供标号提供了相当于了相当于 elseelse 子句的功能。子句的功能。3.while3.while 语句:当条件为真的时候,语句:当条件为真的时候,whilewhile 语句语句反复执行目标语句。反复执行目标语句。再循环条件中定义的变量在再循环条件中定义的变量在每次的循环里面都要经历创建和撤销的过程。每次的循环里面都要经历创建和撤销的过程。4.for4.for 语句:语句:forfor 语句的语法形式是:语句的语法形式是:forfor(init-statementinit-statement;condition condition;expressionexpression)statementstatement。5.do while5.do while 语句:该语句保证了循环体至少执语句:该语句保证了循环体至少执行一次。行一次。do statement whiledo statement while(conditioncondition);分号一定不能忘了。分号一定不能忘了。6.break6.break 语句:语句:breakbreak 语句用在结束最近的语句用在结束最近的whilewhile,do while,for,switchdo while,for,switch 语句,并将程语句,并将程序的执行权传递给紧接在被终止语句之后的语序的执行权传递给紧接在被终止语句之后的语句。句。7.continue7.continue 语句:语句:continuecontinue 语句导致最近的循语句导致最近的循环语句的当次迭代提前结束。对于环语句的当次迭代提前结束。对于 whilewhile 和和 dodowhilewhile 语句,继续求解循环条件。而对于语句,继续求解循环条件。而对于 forfor 循循环,环,程序流程接着求解程序流程接着求解 forfor 语句头中的语句头中的 expexp 表达表达式。式。8.goto8.goto 语句:语句:由于所有由于所有 gotogoto 的程序都可以改写的程序都可以改写成为不用成为不用 gotogoto 语句,所以,也没有必要再使用语句,所以,也没有必要再使用gotogoto 语句了。语句了。第五章第五章 函数函数1.1.函数的定义:函数的定义:所谓的函数就是由函数名以及一所谓的函数就是由函数名以及一组操作数类型唯一的表示。组操作数类型唯一的表示。函数的操作数就是形函数的操作数就是形参,参,在一对圆括号中声明,在一对圆括号中声明,形参与形参之间以逗形参与形参之间以逗号隔离。号隔离。而所谓的函数调用就是使用调用操作符而所谓的函数调用就是使用调用操作符()()实现函数的调用。实现函数的调用。函数的调用其实就是做了函数的调用其实就是做了两件事情:两件事情:用对应的实参初始化函数的形参,用对应的实参初始化函数的形参,并并将控制权转移给被调用的函数。将控制权转移给被调用的函数。形参与实参的差形参与实参的差别在于形参是在函数的形式表中定义的,别在于形参是在函数的形式表中定义的,并由调并由调用函数是传递给函数的实参初始化。用函数是传递给函数的实参初始化。2.2.定义函数的一般形式:定义函数的一般形式:定义无参函数的一般形定义无参函数的一般形式:类型标识符式:类型标识符 函数名()函数名()声明部分声明部分 语句语句 定义有参函数的一般形式:类型标识符定义有参函数的一般形式:类型标识符 函数名函数名(形式参数列表)(形式参数列表)声明部分声明部分 语句语句 。3.3.函数的参数和函数的值:函数的参数和函数的值:其实在定义函数时指其实在定义函数时指定的形参,定的形参,在未出现函数调用时,在未出现函数调用时,它们并不占内它们并不占内存中的存储单元,存中的存储单元,因此才称它们是形式参数或虚因此才称它们是形式参数或虚拟参数,拟参数,表示它们并不是实际存在的数据,表示它们并不是实际存在的数据,只有只有在函数发生调用时,在函数发生调用时,函数中的形参才被分配内存函数中的形参才被分配内存单元,单元,一遍接收从实参传来的数据。一遍接收从实参传来的数据。在每一次的在每一次的调用结束后,形参所占的内存单元也会被释放。调用结束后,形参所占的内存单元也会被释放。实参可以是常量,实参可以是常量,变量或者表达式。变量或者表达式。而在定义函而在定义函数时,数时,必须在函数首部指定形参的类型,必须在函数首部指定形参的类型,在函数在函数的调用过程中,的调用过程中,实参与形参的类型应相同或赋值实参与形参的类型应相同或赋值兼容,实参变量对形参变量的数据传递是值传兼容,实参变量对形参变量的数据传递是值传递,单向传递,只有实参传给形参,不能由形参递,单向传递,只有实参传给形参,不能由形参传回给实参。函数的返回值就是通过函数中的传回给实参。函数的返回值就是通过函数中的returnreturn 语句获得,函数的类型决定返回值的类语句获得,函数的类型决定返回值的类型。型。4.4.函数的调用:函数的调用:函数的调用方式一般用三种,函数的调用方式一般用三种,一、一、函数语句。二、函数表达式。三、函数参数。想函数语句。二、函数表达式。三、函数参数。想要调用一个函数要具备以下的几个条件:要调用一个函数要具备以下的几个条件:首先被首先被调用的函数必须是已经存在的。调用的函数必须是已经存在的。如果使用到库函如果使用到库函数,记得在开头用数,记得在开头用#include#include 包含进来。如果使包含进来。如果使用用户自己定义的函数,用用户自己定义的函数,而该函数与调用它的函而该函数与调用它的函数在同一程序单位中,且位置在主调函数之后,数在同一程序单位中,且位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声则必须在调用此函数之前对被调用的函数作声明。明。5.5.内置函数:这是内置函数:这是c+c+提供的一种可以提高效率提供的一种可以提高效率的方法,的方法,在编译时将所调用函数的代码直接嵌入在编译时将所调用函数的代码直接嵌入主调函数中,主调函数中,而不是将流程转出去。而不是将流程转出去。指定内置函指定内置函数的方法只需在函数首行的左端加一个关键字数的方法只需在函数首行的左端加一个关键字inlineinline 即可。内置函数虽然能节省运算时间,即可。内置函数虽然能节省运算时间,但是会增加目标程序的长度。但是会增加目标程序的长度。因此只将规模小的因此只将规模小的函数声明成内置函数。函数声明成内置函数。6.6.函数的重载:函数的重载:C+C+允许用同一个函数名定义多允许用同一个函数名定义多个函数,个函数,这些函数的参数个数和类型不同。这些函数的参数个数和类型不同。这就这就是函数的重载。是函数的重载。是一个函数名可以多用,是一个函数名可以多用,有不同有不同的含义。的含义。7.7.函数的模板:函数的模板:所谓的函数的模板,所谓的函数的模板,实际上就是实际上就是建立一个通用函数,建立一个通用函数,其函数类型和形参类型不具其函数类型和形参类型不具体指定,体指定,用一个虚拟的类型来代表。用一个虚拟的类型来代表。这个通用函这个通用函数就是函数模板。数就是函数模板。凡是函数体相同的函数都可以凡是函数体相同的函数都可以用这个模板来代替,用这个模板来代替,不必定义多个函数,不必定义多个函数,只需要只需要在模板中定义一次即可。在模板中定义一次即可。在调用函数系统会根据在调用函数系统会根据实参的类型来取代模板中的虚拟类型,实参的类型来取代模板中的虚拟类型,从而实现从而实现了不同函数的功能。了不同函数的功能。定义函数模板的一般形式为定义函数模板的一般形式为templatetemplate T或或 templatetemplate classT。用函数模板比函数重载更方便,用函数模板比函数重载更方便,程序更简洁。程序更简洁。但但是只适用于函数的参数个数相同而类型不同。是只适用于函数的参数个数相同而类型不同。8.8.有默认参数的函数:有默认参数的函数:有时候在主函数调用别的有时候在主函数调用别的被调函数时,被调函数时,使用同样的实参,使用同样的实参,因此可在定义函因此可在定义函数的时候给形参一个默认值。这样可以简化编数的时候给形参一个默认值。这样可以简化编程,程,提高运行效率。提高运行效率。一个函数不能既作为重载函一个函数不能既作为重载函数,数,又作为有默认参数的函数,又作为有默认参数的函数,因为很容易出现因为很容易出现二义性。二义性。9.9.函数的嵌套调用:函数的嵌套调用:C+C+不允许对函数作嵌套定不允许对函数作嵌套定义,义,也就是说在一个函数中不能完整地包含另一也就是说在一个函数中不能完整地包含另一个函数。个函数。在一个程序中每一个函数的定义都是互在一个程序中每一个函数的定义都是互相平行很独立的。虽然布恩那个嵌套定义函数,相平行很独立的。虽然布恩那个嵌套定义函数,但是可以嵌套调用函数。但是可以嵌套调用函数。10.10.函数的递归调用:在调用一个函数的过程中函数的递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身。又出现直接或间接地调用该函数本身。这就是函这就是函数的递归调用。数的递归调用。11.11.局部变量和全局变量:所谓的局部变量就是局部变量和全局变量:所谓的局部变量就是在一个函数内部定义的变量,在一个函数内部定义的变量,只在本函数范围内只在本函数范围内有效,有效,只能在本函数内才能使用。只能在本函数内才能使用。全局变量是在全局变量是在函数之外定义的变量。函数之外定义的变量。全局变量的有效范围为从全局变量的有效范围为从定义变量的位置开始到本源文件结束。定义变量的位置开始到本源文件结束。12.12.变量的存储类型:分为两种,静态和动态存变量的存储类型:分为两种,静态和动态存储。所谓的静态存储方式是指在程序运行期间,储。所谓的静态存储方式是指在程序运行期间,系统对变量分配固定的存储空间。系统对变量分配固定的存储空间。而动态存储方而动态存储方式则是在程序运行期间,式则是在程序运行期间,系统对变量动态地分配系统对变量动态地分配存储空间。存储空间。前面提到的全局变量就是存放在静态前面提到的全局变量就是存放在静态存储区中,存储区中,在程序执行的过程中它们占据固定的在程序执行的过程中它们占据固定的存储单元。存储单元。在动态存储区中存放的是函数形式参在动态存储区中存放的是函数形式参数,数,和函数中的自动变量,和函数中的自动变量,以及函数调用时的现以及函数调用时的现场保护和返回地址等。可以使用场保护和返回地址等。可以使用 staticstatic 将局部将局部变量变为静态局部变量。变量变为静态局部变量。静态局部变量在静态存静态局部变量在静态存储区内分配存储单元。储区内分配存储单元。在程序整个运行期间都不在程序整个运行期间都不释放。释放。第六章第六章 数组与字符串数组与字符串1.1.数组的定义:数组的定义:数组是一组相同类型的数据的集数组是一组相同类型的数据的集合,合,他们占用连续的存储单元,他们占用连续的存储单元,数组中的每个数数组中的每个数据称为一个元素。据称为一个元素。2.2.一维数组定义:一维数组定义:数组的三要素是其名称,数组的三要素是其名称,以及以及每个元素的数据类型,每个元素的数据类型,还有就是必须是常量表达还有就是必须是常量表达式的数据个数。式的数据个数。在定义一个数组的时候必须要明在定义一个数组的时候必须要明确数组中的元素的个数,确数组中的元素的个数,否则编译器会报错。否则编译器会报错。还还有要注意的是在访问数组的时候,有要注意的是在访问数组的时候,最大下表应该最大下表应该为数组元素个数减为数组元素个数减 1 1,不然会导致程序的异常行,不然会导致程序的异常行为。依然可以使用为。依然可以使用 sizeofsizeof()来计算某个数组()来计算某个数组所包含的元素个数。所包含的元素个数。3.3.字符数组与字符串:字符数组与字符串:字符数组是指数组里面是字符数组是指数组里面是存储字符数据,在存储字符数据,在 c+c+中,字符串是一空字符中,字符串是一空字符(/0/0)结尾的字符组,结尾的字符组,空字符是字符串结束的空字符是字符串结束的标志。标志。我们可以使用我们可以使用 cincin 对象的对象的 getlinegetline 来安全来安全读取数据。读取数据。GetlineGetline 可以读取包括空格的整行,可以读取包括空格的整行,也可以限制最多读取的字符数,也可以限制最多读取的字符数,或结束字符。或结束字符。可可以使用以使用 strcpystrcpy 将字符串复制到另一个字符数组将字符串复制到另一个字符数组中,增加一个参数可以限制最多复制的字符数,中,增加一个参数可以限制最多复制的字符数,防止写入的数据时越过数组边界。使用防止写入的数据时越过数组边界。使用 strcmpstrcmp来比较字符串的大小,来比较字符串的大小,使用使用 strcatstrcat 连接字符串,连接字符串,使用使用 strlenstrlen 来获得字符串的长度。来获得字符串的长度。4.4.多维数组:多维数组:以为数组可看作是一行数据,以为数组可看作是一行数据,二维二维数组对应由行列构成的数据网络,数组对应由行列构成的数据网络,其中一维对应其中一维对应于行,于行,另一维对应于列。另一维对应于列。访问二维数组中的元素,访问二维数组中的元素,需要用需要用 2 2 个下标,下标都是从个下标,下标都是从 0 0 开始的,开始的,c+c+中中规定,先指定行下标,再指定列下标。规定,先指定行下标,再指定列下标。5.5.创建和使用指针变量:创建和使用指针变量:学习指针之前首先要了学习指针之前首先要了解一下地址,地址单元的编号就是该单元的地解一下地址,地址单元的编号就是该单元的地址,址,它表明了内存单元在内存中的相对位置。它表明了内存单元在内存中的相对位置。变变量的类型不同,量的类型不同,占用的内存大小也不同。占用的内存大小也不同。变量占变量占用的首个内存单元的地址就是变量的地址。在用的首个内存单元的地址就是变量的地址。在C+C+中可以定义特殊的变量,用来保存普通的变中可以定义特殊的变量,用来保存普通的变量地址,这就是指针变量。用“量地址,这就是指针变量。用“*”放在变量前”放在变量前面说明变量是用来存储一个变量的地址,面说明变量是用来存储一个变量的地址,一般定一般定义一个指针变量的时候要对它进行初始化,义一个指针变量的时候要对它进行初始化,这是这是个良好的习惯。个良好的习惯。我们通过我们通过&,=将一个变量的地址将一个变量的地址保存到指针变量之中。称指针变量指向某个变保存到指针变量之中。称指针变量指向某个变量。要特别注意的是,在指针赋值的时候,取地量。要特别注意的是,在指针赋值的时候,取地址的变量类型必须要与指针类型一样,址的变量类型必须要与指针类型一样,否则编译否则编译器报错。值得注意的是,在定义指针变量之后,器报错。值得注意的是,在定义指针变量之后,指针变量前的指针变量前的*表示解除引用,表示解除引用,表示表示“存储在“存储在处的值”处的值”。6.6.指针的使用:一指针的使用:一 传递函数参数,实现对实参传递函数参数,实现对实参的间接修改。的间接修改。二二 访问类中成员数据和成员函数。访问类中成员数据和成员函数。三三 管理堆中的数据。管理堆中的数据。6.6.栈和堆:栈和堆:每个程序运行时,每个程序运行时,会创建会创建 5 5 个内存区个内存区域:全局名称空间(全局变量)域:全局名称空间(全局变量),栈(保存局部,栈(保存局部变量和函数形参)变量和函数形参),堆(自由存储区,是预留给,堆(自由存储区,是预留给程序员的大块内存,程序员的大块内存,程序员可以从堆中请求内存程序员可以从堆中请求内存空间,使用后释放内存空间)空间,使用后释放内存空间),寄存器(用于内,寄存器(用于内部管理,部管理,CPUCPU 内部的临时数据,指令缓存,状态内部的临时数据,指令缓存,状态管理)管理),代码空间(保存程序指令),代码空间(保存程序指令)。7.7.栈和堆的使用:使用栈和堆的使用:使用 newnew 运算符可以从堆中运算符可以从堆中分配内存。堆中分配的内存,没有对应的变量,分配内存。堆中分配的内存,没有对应的变量,只能通过指针间接访问。只能通过指针间接访问。而使用而使用 deletedelete 运算符,运算符,可以释放请求的堆空间。可以释放请求的堆空间。,使用完堆的内存区域,使用完堆的内存区域后,必须调用后,必须调用 deletedelete 释放相应空间,避免内存释放相应空间,避免内存泄露。在使用了泄露。在使用了 deletedelete 指针之后,该指针将成指针之后,该指针将成为悬摆指针,解析或者再次为悬摆指针,解析或者再次 deletedelete 该指针将会该指针将会导致程序崩溃。所以在导致程序崩溃。所以在 deletedelete 指针后,应赋值指针后,应赋值指针指针NULLNULL或者重新分配内存空间或者重新分配内存空间deletedelete的本质的本质只是释放指针所指向的堆空间,只是释放指针所指向的堆空间,对指针本身并没对指针本身并没有什么影响。此时指针依然指向原先的内存位有什么影响。此时指针依然指向原先的内存位置。置。第七章第七章 类的基础概念类的基础概念1.1.类和对象的定义:类和对象的定义:我们首先要知道的是抽象是我们首先要知道的是抽象是对具体对象问题进行概括,对具体对象问题进行概括,抽出这一类对象的公抽出这一类对象的公共性质加以描述的过程。将抽象出的数据成员,共性质加以描述的过程。将抽象出的数据成员,代码成员相结合,代码成员相结合,视为一个整体,视为一个整体,通常我们称之通常我们称之为封装。在函数中我们用为封装。在函数中我们用括起来。继承是括起来。继承是 c+c+中支持层次分类懂得一种机制,中支持层次分类懂得一种机制,允许程序员在保允许程序员在保持原有类特性的基础上,持原有类特性的基础上,进行更具体的说明。进行更具体的说明。总总的来说,的来说,类是具有相同属性和行为的一组对象的类是具有相同属性和行为的一组对象的集合,集合,它为属于该类的全部对象提供统一的抽象它为属于该类的全部对象提供统一的抽象描述。描述。其内部包括属性和行为两个主要部分。其内部包括属性和行为两个主要部分。利利用类我们可以实现数据的封装,用类我们可以实现数据的封装,隐藏,隐藏,继承与派继承与派生。生。类一般是用来编写大型的复杂程序,类一般是用来编写大型的复杂程序,其模块其模块化程度比化程度比 c c 中采用函数更高。类中的成员分为:中采用函数更高。类中的成员分为:数据成员和成员函数。一般在数据成员和成员函数。一般在 publicpublic 后面的声后面的声明是类与外部的接口,明是类与外部的接口,任何外部函数都可以访问任何外部函数都可以访问公有类型数据和函数。而在公有类型数据和函数。而在 privateprivate 后面的申后面的申明,明,只允许本类中的函数访问,只允许本类中的函数访问,而类外部的任何而类外部的任何函数都不能访问。函数都不能访问。值得注意的一点是,值得注意的一点是,如果在类如果在类中不写中不写 privateprivate 和和 publicpublic 的话,那么系统默认的话,那么系统默认是是 privateprivate 声明。声明。在类中定义的变量我们称为类的对象。在类中定义的变量我们称为类的对象。内联函数:内联函数:为了提高运行是的效率,为了提高运行是的效率,对于较为简对于较为简单的函数可以声明为内联形式,单的函数可以声明为内联形式,而内联函数不能而内联函数不能由复杂的结构,由复杂的结构,比如循环结构等,比如循环结构等,在类中声明内在类中声明内联成员函数的方式是使用联成员函数的方式是使用 inlineinline 关键字或者是关键字或者是直接在类中直接定义函数。直接在类中直接定义函数。2.2.使用对象:定义完类后,在类中创建对象后,使用对象:定义完类后,在类中创建对象后,可以通过可以通过.操纵符来访问它的成员函数和成员变操纵符来访问它的成员函数和成员变量,但是只能访问量,但是只能访问 publicpublic 部分的成员函数和成部分的成员函数和成员变量。员变量。(在定义一个类时候,(在定义一个类时候,classclass 类名类名 ;分号一定要记得)分号一定要记得),在类中定义的每个成员函数,在类中定义的每个成员函数,都必须要进行定义。都必须要进行定义。类中成员函数的定义与普通类中成员函数的定义与普通函数类似,函数类似,但需要制动类作用与前缀,但需要制动类作用与前缀,表示的为表示的为特定某个类的成员函数。特定某个类的成员函数。3.3.构造函数和析构函数:构造函数和析构函数:构造函数是类中的一种构造函数是类中的一种特殊的函数,特殊的函数,用于创建对象时,用于创建对象时,完成对数据成员完成对数据成员的初始化。的初始化。构造函数是由系统自动调用的,构造函数是由系统自动调用的,每当每当我们创建对象时,我们创建对象时,系统就会自动调用相应的构造系统就会自动调用相应的构造函数。也就是说,如果没有声明构造函数,编译函数。也就是说,如果没有声明构造函数,编译器自动生成器自动生成 1 1 个默认构造函数,个默认构造函数,但不执行任何操但不执行任何操作。作。如果声明了构造函数,如果声明了构造函数,往往也需要声明析构往往也需要声明析构函数,函数,析构函数用于在对象消亡时执行清理工作析构函数用于在对象消亡时执行清理工作并释放配给对象的内存。并释放配给对象的内存。析构函数为类名之前加析构函数为类名之前加,没有返回类型,不能传递任何参数,有且仅,没有返回类型,不能传递任何参数,有且仅有一个。有一个。当然析构函数也由系统自动调用,当然析构函数也由系统自动调用,每当每当对象消亡的时候,对象消亡的时候,系统就会自动调用相应的析构系统就会自动调用相应的析构函数。函数。4.const4.const 成员函数与常对象成员函数与常对象5.5.内联函数:内联函数:将普通函数声明为内联函数,将普通函数声明为内联函数,可以可以提高运行效率,类的成员函数也可以声明为内提高运行效率,类的成员函数也可以声明为内联。联。6.6.对象成员:对象成员:静态成员:静态成员:同一个类不同对象的数同一个类不同对象的数据成员所占用的内存空间是不同的。据成员所占用的内存空间是不同的。在一些情况在一些情况下,类的数据成员的值对每个对象都是相同的,下,类的数据成员的值对每个对象都是相同的,如当前已创建对象的数量,如当前已创建对象的数量,这是可以将该数据成这是可以将该数据成员声明为静态数据成员。员声明为静态数据成员。静态成员的初始化放在静态成员的初始化放在类定义的外部。类定义的外部。静态成员又分为静态数据成员和静态成员又分为静态数据成员和静态成员函数。静态成员函数。,静态数据成员具有全局性,供,静态数据成员具有全局性,供类的所有对象共享。类的所有对象共享。静态成员函数只能访问类的静态成员函数只能访问类的静态成员,静态成员,而不能访问类的非静态成员。而不能访问类的非静态成员。因为当因为当通过类名和运算符:通过类名和运算符:调用一个静态成员时,不:调用一个静态成员时,不能确定函数中所访问的非静态成员属于哪个对能确定函数中所访问的非静态成员属于哪个对象。象。7.7.类地友元:友元函数实在类声明中由关键字类地友元:友元函数实在类声明中由关键字friendfriend 修饰说明的非成员函数,在它的函数体修饰说明的非成员函数,在它的函数体中能够通过对象名访问中能够通过对象名访问 privateprivate 和和 protectprotect 成成员,员,能增加灵活性,能增加灵活性,使程序员可以再封装和快速使程序员可以再封装和快速性方面做合理选择。性方面做合理选择。访问对象中的成员必须通过访问对象中的成员必须通过对象名。对象名。若一个类为另一个类的友元,若一个类为另一个类的友元,则此类的则此类的所有成员都能访问对方类的私有成员,一样用所有成员都能访问对方类的私有成员,一样用friendfriend 关键字,要注意的是友元类的关系是单关键字,要注意的是友元类的关系是单向的,向的,若若 B B 是是 A A 类的友元,类的友元,只能只能 B B 访问访问 A A 的私有的私有和保护数据。反之不行。和保护数据。反之不行。8.const8.const 成员函数与常对象:将类中某些只会读成员函数与常对象:将类中某些只会读取数据成员的函数声明为常成员函数,取数据成员的函数声明为常成员函数,只要只要在函在函数头的结尾加上数头的结尾加上 constconst,因此在常成员函数中不,因此在常成员函数中不能修改数据成员,能修改数据成员,否则编译器将报错。否则编译器将报错。要养成好要养成好的编程习惯就要尽可能的将成员函数声明为常的编程习惯就要尽可能的将成员函数声明为常成员函数,这样可以防止对数据成员的意外修成员函数,这样可以防止对数据成员的意外修改。常对象:常类型的对象必须进行初始化,而改。常对象:常类型的对象必须进行初始化,而且不能被更新。且不能被更新。需要注意的是通过常对象只能调需要注意的是通过常对象只能调用它的常成员函数。常引用:在声明引用时用用它的常成员函数。常引用:在声明引用时用constconst 修饰,被声明的引用就是常引用,常引用修饰,被声明的引用就是常引用,常引用所引用的对象也是不能被更新。所引用的对象也是不能被更新。9.9.类中的指针应用:类中的指针应用:类似在堆中创建一个普通类类似在堆中创建一个普通类型数据空间,也可以在堆中创建一个类的对象。型数据空间,也可以在堆中创建一个类的对象。用完之后用用完之后用 deletedelete 释放对象,将调用对象的析释放对象,将调用对象的析构函数,构函数,然后释放堆中的内存。然后释放堆中的内存。访问堆中创建对访问堆中创建对象的方法,象的方法,只能通过指针间接访问,只能通过指针间接访问,两种访问方两种访问方式:式:(*对象名)对象名).成员函数名;对象名成员函数名;对象名-成员函成员函数名。数名。指针数据成员:指针数据成员:类中包含的指针数据成员,类中包含的指针数据成员,每个指针指向堆中的对象。每个指针指向堆中的对象。如果类中含有指针数如果类中含有指针数据成员,据成员,就要编写析构函数来释放内存,就要编写析构函数来释放内存,以免造以免造成内存泄露。成内存泄露。第八章第八章 继承与多态继承与多态1.1.继承的概览:继承的概览:一个新类可以从现有的类继承特一个新类可以从现有的类继承特征,征,特征表示属性和方法,特征表示属性和方法,而从现有的类产生新而从现有的类产生新类的过程称为派生。类的过程称为派生。一般我们称现有的用来派生一般我们称现有的用来派生新类的类称为基类或父类,新类的类称为基类或父类,而派生出来的类称为而派生出来的类称为派生类或者子类,派生类或者子类,当然派生类可以作为基类继续当然派生类可以作为基类继续来派生类,从而形成类的层次结构。来派生类,从而形成类的层次结构。派生类的派生类的定义是定义是 class class 派生类名:继承方式派生类名:继承方式 基类名基类名 private private:protected protected:public public:。2.2.继承方式:继承方式:继承方式分为三种,继承方式分为三种,分别是分别是publicpublic:公有继承;公有继承;privateprivate:私有继承;:私有继承;protectedprotected:保:保护继承。通常我们在派生类护继承。通常我们在派生类 类体中添加数据成类体中添加数据成员以及成员函数,员以及成员函数,而基类的成员将自动的称为派而基

    注意事项

    本文(C++-primer-(初学者可看笔记).pdf)为本站会员(w****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开