《C++从入门到精通》配套教学课件..pptx
- 文档编号:30788663
- 上传时间:2023-09-25
- 格式:PPTX
- 页数:266
- 大小:1,014.99KB
《C++从入门到精通》配套教学课件..pptx
《《C++从入门到精通》配套教学课件..pptx》由会员分享,可在线阅读,更多相关《《C++从入门到精通》配套教学课件..pptx(266页珍藏版)》请在冰豆网上搜索。
C+从入门到精通,第1章解开C+的神秘面纱,我的第一个C+程序,本章内容,1.1认识C+1.2C+的优势1.3常见的C+开发环境1.4新手的福音VisualStudio2017集成环境1.5熟悉VisualStudio2017开发界面1.6实战演练第一个C+项目1.7理解C+语言的翻译过程,1.1认识C+,人们对计算机技术追求的脚步并没有停止,C+随着C语言的发展而来。
1979年,Bjarne博士为了分析Unix的内核,苦于当时没有合适的工具将Unix的内核模块化,于是他为C加上了一个类似Simula的机制,而贝尔实验室对Bjarne博士的这种创新非常感兴趣,专门为此成立了一个开发小组。
当时,这个语言并不是叫做C+,而是叫做Cwithclass,它仅仅被当作C语言的一种补充。
1.2C+的优势,
(1)C+支持数据封装,支持数据封装就是支持数据抽象。
在C+中,类是支持数据封装的工具,对象则是数据封装的实现。
在C+中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义,数据将被隐藏在封装体中,该封装体通过操作接口与外界交换信息。
对象被说明具有一个给定类的变量。
在C+中,结构可作为一种特殊的类,它虽然可以包含函数,但是它没有私有或保护的成员。
(2)C+类中包含私有、公有和保护成员。
C+类中可定义三种不同访问控制权限的成员。
私有(Private)成员,只有在类中说明的函数才能访问该类的私有成员,而在该类外的函数不可以访问私有成员;另一种是公有(Public)成员,类外面也可访问公有成员,成为该类的接口;还有一种是保护(Protected)成员,这种成员只有该类的派生类可以访问,其余的在这个类外不能访问。
(3)C+语言中通过消息处理对象,每个对象根据所接收到的消息的性质来决定需要采取的行动,以响应这个消息。
(4)C+中允许友元函数访问封装性类中的私有成员。
私有成员一般是不允许该类外面的任何函数访问的,但是友元函数便可打破这条禁令,它可以访问该类的私有成员(包含数据成员和成员函数)。
(5)C+允许函数名和运算符重载。
支持多态性,C+允许一个相同的标识符或运算符代表多个不同实现的函数,这就称为标识符或运算符的重载,用户可以根据需要定义标识符重载或运算符重载。
(6)C+具有继承性,可以允许单继承和多继承。
一个类可以根据需要生成派生类。
派生类继承了基类的所有方法,另外派生类自身还可以定义所需要的不包含在父类中的新方法。
一个子类的每个对象包含有从父类那里继承来的数据成员以及自己所特有的数据成员。
(7)C+语言支持动态联编。
C+中可以定义虚函数,通过定义虚函数来支持动态联编。
1.3常见的C+开发环境,随着C+的不断发展,C+的集成开发环境也有着长足的发展,其开发环境主要有以下几种。
1.TurboC+2.C+Builder3.Dev-C+4.Code:
Blocks5.VisualStudio6.Eclipse7.Qt8.VisualC+,1.4新手的福音VisualStudio2017集成环境1.4.1安装VisualStudio2017的条件1.4.1安装VisualStudio2017,1.4.1安装VisualStudio2017的条件,1.5熟悉VisualStudio2017开发界面,1.5.1创建项目1.5.2菜单栏1.5.3工具栏1.5.4解决方案资源管理器1.5.5属性面板1.5.6错误列表1.5.7输出面板,1.5.1创建项目,1.5.2菜单栏,1.5.3工具栏,1.5.4工具箱面板,1.5.5属性面板,1.5.6错误列表,1.5.7输出面板,1.6实战演练第一个C+项目,#includeusingnamespacestd;voidmain()coutHelloWorldendl;system(pause);,1.7理解C+语言的翻译过程,
(1)字符映射(CharacterMapping)。
文件中的物理源字符被映射到源字符集中,其中包括字符运算符的替换、控制字符的替换等。
(2)行合并(LineSplicing)。
在字符映射后,进行行合并,以反斜杠结束的行为标志,和它接下来的行合并。
(3)标记化(Tokenization)。
在编写C+程序中,需要写各类注释,增加程序的可读性。
每一条注释被一个单独的空字符所替换。
C+双字符运算符被识别为标记。
源代码被分析成预处理标记。
(4)预处理(Preprocessing)。
在对程序进行转换后,就过渡到了重要的预处理。
调用预处理指令并扩展宏,使用#include指令包含的文件。
重复以上步骤
(1)到步骤(4),直到整个程序都处理完。
上述4个阶段统称为预处理阶段。
(5)字符集映射(Character-setMapping)。
对预处理完的程序,将源字符集成员、转义序列转换成等价的执行字符集成员。
(6)字符串连接(StringConcatenation)。
下一步,将相邻的字符串连接成为一个字符串。
(7)翻译(Translation)。
以上各步对文本进行了处理,接下来进行语法和语义分析编译,并翻译成目标代码。
(8)模板处理(TemplateProcessing)。
根据在程序中引用的模板,进行模板实例的处理。
(9)连接(Linkage)。
解决外部引用的问题,链接外部引用实例,准备好程序映像以便执行。
第2章零基础开始学习,C+的程序结构,本章内容,2.1分析C+程序的结构2.2编译前的预处理2.3输入和输出数据2.4命名空间2.5实战演练经典的入门程序,2.1分析C+程序的结构,2.1.1#include指令及头文件2.1.2main函数2.1.3变量声明和定义2.1.4函数的声明2.1.5关于注释,2.2编译前的预处理,C+的预处理(preprocess),是指在C+程序源代码被编译之前,由预处理器(preprocessor)对C+程序源代码进行的处理。
虽然预处理命令不是C+语言的一部分,但是它有扩展C+程序设计环境的作用。
提示:
预处理命令是C+统一规定的,但是它不是C+语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。
2.3输入和输出数据,2.4命名空间,2.4.1命名空间的定义2.4.2using关键字2.4.3命名空间std,2.4.1命名空间的定义,在C+中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等。
在大规模程序的设计中,以及在程序员使用各种各样的C+库时为了避免,这些标识符的命名发生冲突,标准C+引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。
原来C+标识符的作用域分成三级:
代码块(,如复合语句和函数体、类和全局。
现在,在其中的类和全局之间,标准C+又添加了命名空间这一个作用域级别。
命名空间可以是全局的,也可以位于另一个命名空间之中,但是不能位于类和代码块中。
所以,在命名空间中声明的标识符,默认具有外部链接特性(除非它引用了常量)。
2.4.2using关键字,在C+的命名空间中,为了使用时的方便,又引入了关键字using。
利用using声明可以在引用命名空间成员时不必使用命名空间限定符“:
”。
使用方法如下:
usingnamespacestd;,2.4.3命名空间std,C+标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。
有了命名空间的概念,标识符就被限制在特定的范围内,不会引起命名冲突。
最典型的例子就是std命名空间,C+标准库中所有标识符都包含在该命名空间中。
如果确信在程序中引用某个或者某些程序库不会引起命名冲突,那么可以通过using操作符来简化对程序库中标识符(通常是函数)的使用,例如:
usingnamespacestd;那么就可以不用在标识符加前缀std:
来使用C+标准库中的函数了。
2.5实战演练经典的入门程序,第3章程序中的数据种类,数据类型,本章内容,3.1标识符3.2变量与常量3.2基本变量类型3.3查询变量的类型和内存空间大小3.3自定义数据类型3.4实战演练对比不同数据类型的长度,3.1标识符,3.1.1保留字3.1.2标识符命名,3.2变量与常量,3.2.1变量3.2.2常量,3.3基本变量类型,3.3.1整数类型3.3.2字符类型3.3.3浮点数类型3.3.4布尔类型,3.4查询变量的类型和内存空间大小,首先,在主程序中,定义了一个unsignedlong类型的变量a,初始化为0。
下面又定义了一个float类型的变量b,该变量初始化为0.0F。
调用typeid和sizeof将两个变量的类型名和空间大小输出。
3.5自定义数据类型,在现实生活中,信息的概念可能是长度、数量和面积等。
在C+语言中,信息被抽象为int、float和double等基本数据类型。
从基本数据类型名称上,不能够看出其所代表的物理属性,并且int、float和double为系统关键字,不可以修改。
为了解决用户自定义数据类型名称的需求,C+语言中引入类型重定义语句typedef,可以将已有的类型名用新的类型名代替,从而丰富数据类型所包含的属性信息。
typedef的语法描述:
typedef类型名称类型标识符;typedef为系统保留字,“类型名称”为已知数据类型名称,包括基本数据类型和用户自定义数据类型,“类型标识符”为新的类型名称。
3.6实战演练对比不同数据类型的长度,从运行结果来看,int、long、float类型变量占4个字节、double类型变量占8个字节,short类型变量占2个字节,char和bool类型变量占1个字节。
可见,不同数据类型,所占用的字节数也不相同。
第4章谁来操作数据,灵活使用运算符,本章内容,4.1运算符概述4.2运算符优先级和结合性4.3实战演练综合运用运算符,4.1运算符概述,4.1.10类型转换运算符,4.2运算符优先级和结合性,4.2.1运算符优先级4.2.2运算符结合性,4.2.1运算符优先级,当不同的运算符混合运算时,运算顺序是根据运算符的优先级而定的,优先级高的运算符先运算,优先级低的运算符后运算。
在一个表达式中,如果各运算符有相同的优先级,运算顺序是从左向右,还是从右向左,是由运算符的结合性确定的。
4.2.2运算符结合性,因此引入运算符结合性的概念。
运算符的结合性是指同一优先级的运算符在表达式中操作的组织方向,即当一个运算对象两侧运算符的优先级别相同时,运算对象与运算符的结合顺序。
C+语言规定了各种运算符的结合方向(结合性)。
大多数运算符结合方向是“自左至右”,即先左后右。
例如,a-b+c,b两侧-和+两种运算符的优先级相同,按先左后右结合方向,b先与减号结合,执行a-b的运算,再执行加c的运算。
除了自左至右的结合性外,C+语言有三类运算符参与运算的结合方向是从右至左,即单目运算符条件运算符赋值运算符。
4.3实战演练综合运用运算符,在该例中,定义了三个int型变量x、y、min,输入x和y,使用比较运算符比较x和y的大小,把其中较小的值赋给min,在输出时,仍然使用比较运算符,判断输出是大于号还是小于号,最后将min输出。
第5章程序的执行方向,程序流程控制,本章内容,5.1顺序语句5.2条件判断语句5.3循环语句5.5多重选择switch语句5.4跳出循环5.6实战演练流程控制综合应用,5.1顺序语句,5.2条件判断语句,5.2.1if条件5.2.2if-else条件5.2.3条件运算符,5.3循环语句,5.3.1for循环5.3.2while循环5.3.3do-while循环,5.4跳出循环,5.4.1continue语句5.4.2break语句5.4.3goto语句,5.5多重选择switch语句,5.6实战演练流程控制综合应用,运输公司要对用户计算运费,假设每吨每公里的价格为P,货物重量为W,路程为S,折扣为D。
第6章C+的灵魂,函数的应用,本章内容,6.1函数的基本结构6.2变量的作用域6.3特殊函数调用方式递归调用6.4内联函数6.5预处理器6.6函数的重载6.7实战演练汉诺塔问题函数,6.1函数的基本结构,6.1.1函数的声明、定义和调用6.1.2参数的传递方式6.1.3函数的默认参数6.1.4函数的返回值,6.1.1函数的声明、定义和调用,声明是告诉编译器一些信息,以协助编译器进行语法分析,避免编译器报错。
而定义是告诉编译器生成一些代码,并且这些代码将由连接器使用。
即声明是给编译器用的,定义是给连接器用的。
在C+程序中调用函数之前,首先要对函数进行定义。
函数的定义如下。
返回类型函数名(参数)函数体return结果;,6.1.2参数的传递方式,所谓的值传递,是指当一个函数被调用时,C+根据形参的类型、数量等特征将实参一一对应的传递给函数,在函数中调用。
在值传递的过程中,形参只在函数被调用时才分配存储单元,调用结束即被释。
实参可以是常量、变量、表达式、函数(名)等,但它们必须要有确定的值,以便把这些值传送给形参。
实参和形参在数量、类型、顺序上应严格一致值。
传递时是将实参的值传递给对应的形参,即单向传递。
函数并不对传递的实参进行操作,即使形参的值发生了变化,实参的值也不会随着形参的改变而改变。
6.1.3函数的默认参数,C+允许在函数定义时给一个或者多个默认参数值。
在调用该函数时,如果给出实参,则采用实参值;如果没有给定实参值,则调用默认参数值。
提示:
默认参数只可在函数声明中设定一次。
只有在没有函数声明时,才可以在函数定义中设定。
函数默认参数的特点就是在调用时可以不提供或提供部分实参。
6.1.4函数的返回值,C+函数的返回值分为以下几种情况。
主函数main的返回值:
如果返回0,则表示程序运行成功。
返回非引用类型:
函数的返回值用于初始化在调用函数时创建的临时对象。
用函数返回值初始化临时对象与用实参初始化形参的方法是一样的。
如果返回类型不是引用,在调用函数的地方会将函数返回值赋给临时对象。
且其返回值既可以是局部对象,也可以是求解表达式的结果。
返回引用:
当函数返回引用类型时,没有复制返回值。
相反,返回的就是对象本身。
6.2变量的作用域,6.2.1局部变量6.2.2静态局部变量6.2.3外部变量6.2.4寄存器变量,6.2.1局部变量,局部变量是指限制在某一范围内使用的变量,局部变量经常被称为自动变量,因为它们在进入作用域时自动生成,采用堆栈方式分配内存空间,离开作用域时,释放内存空间,值也自动消失。
关键字auto可以显式地说明这个问题,但是局部变量默认为auto,所以没有必要声明为auto。
6.2.2静态局部变量,关静态变量也是一种局部变量,在变量前面加上关键字static,那么这个变量就被定义为静态变量。
通常,在函数中定义的局部变量在函数作用域结束的时候释放掉内存空间,那么该变量也就随之消失了。
当再次调用该函数的时候,会重新初始化局部变量,之后才可以使用。
静态变量与局部变量的不同之处在于,只要程序一直在执行,那么静态变量定义的值就一直有效,不会随着函数的结束而消失。
主要原因是,静态变量在内存中存放是有固定地址的,而不像局部变量一样使用堆栈方式存取。
6.2.3外部变量,extern告诉编译器存在着一个变量和函数,即使编译器在当前的文件中没有看到它,这个变量或函数可能在一个文件或者在当前文件的后面定义。
例如externinti,编译器会知道i肯定作为全局变量存在于某处。
当编译器看到变量i的定义时,并没有看到别的声明,所以知道它在文件的前面已经找到了同样声明的i。
当一个变量成为外部变量之后,不必再次为它分配内存就可以引用这个变量了。
6.2.4寄存器变量,使用寄存器变量的目的就是将变量放入寄存器中,而加快访问速度。
使用关键字“register”来声明一个寄存器变量,如果在声明寄存器变量时,系统的寄存器被其他数据占用,怎寄存器变量就变为了局部变量。
使用register变量是有限制的:
(1)不可能得到或计算register变量的地址;
(2)register变量只能在一个块中声明(不可能有全局的或静态的register变量)。
然而可以在一个函数中(即在参数表中)使用register变量作为一个形式参数。
一般地,不应当推测编译器的优化器,因为它可能比做得更好。
因此,最好避免使用关键字register。
6.3特殊函数调用方式递归调用,在任何一个函数体内不能出现其他函数的定义。
但是,在任何一个函数体内可以调用任何函数,包括该函数本身。
在一个函数中,如果出现直接或者间接地调用函数本身,则称为递归调用,相应的函数称为递归函数。
提示:
在进行递归调用时,被调用函数的数据环境和调用函数的数据环境在结构上是一致的,只是被调用函数和调用函数传递的参数不同而已。
编写一个递归函数,首先得找到递归公式,然后设置初始条件和出口。
(1)找递推公式(往往是找f(n)和f(n-1)之间的关系)。
(2)递归结束条件。
如:
n!
=n*(n-1)!
(递推公式)。
1!
=1(终止条件)。
6.4内联函数,函数的引入可以减少程序的目标代码,实现程序代码的共享。
但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调函数中,被调函数的程序代码执行完后,再返回到调用的地方。
这种调用操作要求调用前保护现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。
对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短,但又被频繁地调用的函数,就不能忽视这种开销。
引入内联函数正是为了解决这个问题,提高程序的运行效率。
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。
由于在编译时将函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不像函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。
6.5预处理器,6.5.1#define预处理器6.5.2#define的作用6.5.3const修饰符,6.5.1#define预处理器,#define是宏定义命令,宏定义具有这样的形式:
#defineidentifierreplacement预处理器无论在什么时候遇到了这样的指令,任何出现identifier的地方都将被替换成replacement。
标识符通常为大写字母,使用下划线代替空格。
6.5.2#define的作用,通过上节的介绍认识了#define预处理器,那么为什么要引入这个预处理器呢?
首先,允许给一些东西命名为描述性的名字,如数字。
举个例子:
intnYen=nDollars*122;像122这样的数字在程序中被称为魔法数字。
一个魔法数字是hard-coded数字,它在代码中没有任何意义122表示什么呢?
是转换率还是其他什么呢?
它是不明确的。
在一些复杂的程序里,通常很难判断一个hard-coded数字具体代表什么。
6.5.3const修饰符,1.一般常量一般常量是指简单类型的常量。
这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。
如:
intconstx=2;或constintx=2;定义或说明一个常数组可采用如下格式:
const2.常对象常对象是指对象常量,定义格式如下:
const或const定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符const可以放在类名后面,也可以放在类名前面。
6.6函数的重载,函数重载是用来描述同名函数具有相同或者相似功能,但数据类型或者是参数不同的函数管理操作的称呼。
在同一作用域内,可以有一组具有相同函数名、不同参数列表的函数,这组函数称为重载函数。
重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
提示:
不要将不同功能的函数定义为重载函数,以免出现对调用结果的误解。
要进行函数重载,必须遵循以下一些规则。
同名函数的参数必须不同,不同之处可以是参数的类型或参数的个数。
通过参数类型的匹配,程序决定使用哪一个同名函数。
必须附加考虑参数的默认值对函数重载的影响。
6.7实战演练汉诺塔问题函数,汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
该问题可分解为下面三个步骤。
(1)将A柱上n-1个盘子移到B柱上(借助C柱)。
(2)把A柱上剩下的一个盘子移到C柱上。
(3)将n-1个盘子从B柱移到C柱上(借助A柱)。
第7章特殊的元素集合,数组与字符串,本章内容,7.1一维数组7.2二维数组和多维数组7.3数组与函数7.4字符串类7.5实战演练1判断字符串回文7.6实战演练2输出斐波那契数列,7.1一维数组,7.1.1一维数组的声明7.1.2数组初始化7.1.3数组的操作,7.1.1一维数组的声明,定义一维数组的语法格式为:
类型数组名常量表达式;其中,类型是数组类型,即数组中各元素的数据类型,可以是整型、浮点型、字符型等基本类型。
数组名是一个标识符,代表着数组元素在内存中的起始地址,它的命名规则与变量名的命名一样。
常量表达式又称下标表达式,表示一维数组中元素的个数,即数组长度(也称为数组大小),用一对方括号“”括起来。
方括号“”的个数代表数组的维数,一个方括号表示一维数组。
7.1.2数组初始化,数组的赋值方法可以在数组定义时赋值,也可以在定义后赋值。
数组初始化赋值是指在数组定义时给数组元素赋予初值,数组初始化是在编译阶段进行的。
这样将减少运行时间,提高效率。
初始化赋值的一般形式为:
类型说明符数组名常量表达式=值,值值;其中在中的各数据值即为各元素的初值,各值之间用逗号间隔。
7.1.3数组的操作,在实际程序设计中,数组的使用是非常频繁的。
由于数组元素都具有相同性质这个特性,它们通常需要进行重复操作,因此,数组操作离不开循环结构。
在数组定义后,只能逐个访问数组元素。
数组元素的引用格式如下:
数组名下标在给数组元素赋值或对数组元素进行引用时,一定要注意下标的值不要超过数组的范围,否则会产生数组越界问题。
因为当数组下标越界时,编译器并不认为它是一个错误,但这往往会带来非常严重的后果。
7.2二维数组和多维数组,7.2.1二维数组的声明7.2.2.二维数组的使用和存取7.2.3多维数组,7.2.1二维数组的声明,定义二维数组的语法格式为:
类型数组名常量表达式1常量表达式2;定义二维数组的格式与定义一维数组的格式相同,只是必须指定两个常量表达式。
第一个常量表达式标识数组的行数,第二个常量表达式标识数组的列数。
在以上语法中,数据类型是数组全体元素的数据类型。
数组名用标识符表示,两个整型常量表达式分别代表数组具有的行数和列数;数组元素的下标一律从0开始。
7.2.2.二维数组的使用和存取,二维数组的初始化的形式:
数据类型数组名常量表达式常量表达式=初始化数据;在以上的初始化形式中,在中给出各数组元素的初值,各初值之间用逗号分开,把中的初值依次赋给各数组元素。
7.2.3多维数组,在这个例子中,首先定义了一个三维数组arr,该数组的维数分别是3、4、2,并且在定义时对该数组进行了初始化;接下来,使用for三重循环,将该数组的每个元素分别输出。
7.3数组与函数,7.3.1一维数组作为函数的参数7.3.2传送多维数组到函数,7.3.1一维数组作为函数的参数,数组作为函数的参数,难点和重点都在于这两点:
(1)理解函数参数两种传递方式:
传值与传址之间区别。
(2)数组变量本身就是内存地址。
关于函数的参数传递方式,在上一章明确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+从入门到精通 C+ 入门 精通 配套 教学 课件