目录_ppt.txt

大学C++面向对象程序设计-曹静-课件PPT

收藏

资源目录
跳过导航链接。
大学C面向对象程序设计-曹静-课件PPT.zip
C++面向对象程序设计-曹静-PPT演示文稿
C++面向对象程序设计-曹静-PPT课件文件
C++面向对象程序设计-曹静-大学教学资料
(课件资料)《C++面向对象程序设计》-曹静-电子教案
压缩包内文档预览:
预览图
编号:21836494    类型:共享资源    大小:3.54MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 C++ 面向 对象 程序设计 曹静 课件 ppt
资源描述:
大学C++面向对象程序设计-曹静-课件PPT,大学,C++,面向,对象,程序设计,曹静,课件,ppt
内容简介:
2019年9月8日星期日,C+面向对象程序设计,1.1 面向对象的基本概念 1.2 C+面向对象程序设计 1.3 C+程序的基本组成 1.4 Visual C+6.0开发环境,第1章 面向对象程序设计概述,2019年9月8日星期日,C+面向对象程序设计,1.1 面向对象的基本概念,面向对象程序设计的本质是把数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体对象。 对同类型对象抽象出其共性,形成类。,2019年9月8日星期日,C+面向对象程序设计,1.1 面向对象的基本概念,面向对象程序设计方法具有4个基本特征:抽象、封装、继承和多态性 。 抽象(abstract)就是忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。面向对象方法中的“类”将具有相同属性和行为的一组对象提供了抽象的描述,一个属于某类的对象称为该类的一个实例 。,2019年9月8日星期日,C+面向对象程序设计,1.1 面向对象的基本概念,封装(encapsulation)就是把每个对象的数据(属性)和操作(行为)包装在一个类中,并尽可能隐藏对象的内部细节。一般限制直接访问对象的属性,而应通过操作接口访问,这样使程序中模块之间关系更简单、数据更安全。对程序的修改也仅限于类的内部,使得由于修改程序所带来的影响局部化 。,2019年9月8日星期日,C+面向对象程序设计,1.1 面向对象的基本概念,多态性(polymorphism)是指允许不同类的对象对同一消息作出的响应不相同。一般类中定义的属性或行为,被特殊类继承后,可以具有不同的数据类型或者是表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义,2019年9月8日星期日,C+面向对象程序设计,1.1 面向对象的基本概念,通过使用面向对象程序设计的抽象、封装、继承和多态性等机制,程序更易于维护、更新和升级。利用代码可重用性,程序员可以在程序中大量使用成熟的类库,从而缩短程序的开发时间,提高程序员的工作效率和程序的可靠性。,2019年9月8日星期日,C+面向对象程序设计,1.2 C+面向对象程序设计,本书介绍的主要就是使用最为广泛的C+语言和使用C+语言进行面向对象程序设计的方法。在学习编程之前,我们首先来简单了解以下C+程序的开发过程。,2019年9月8日星期日,C+面向对象程序设计,1.2 C+面向对象程序设计,程序的开发通常要经过编辑、编译、连接、运行调试这几个步骤。编辑是将源程序输入到计算机中,生成后缀为.cpp的磁盘文件。编译(compile)是将程序的源代码转换成机器语言代码。程序员编制的源程序被编译后,会生成一个目标文件,这个文件通常以.obj作为文件扩展名,该目标文件为源程序的目标代码。,2019年9月8日星期日,C+面向对象程序设计,1.2 C+面向对象程序设计,但是编译后的程序还不能由计算机执行,因为目标代码只是一个个的程序块,需要相互衔接成为一个适应一定操作系统环境的程序整体。为了把它转换成可执行程序,必须进行连接(link)。C+程序通常是通过同时连接一个或多个目标文件以及一个或几个库而创建的。,2019年9月8日星期日,C+面向对象程序设计,1.2 C+面向对象程序设计,库(.lib)是一组由机器指令构成的程序代码,是可连接文件。库有标准库和用户生成的库。标准库是由C+提供的,用户生成的库是由软件开发商或程序员提供的。文件与库连接的结果,即生成一个后缀为.exe的计算机可执行程序 。,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,我们就从最简单的例子来分析C+程序的构成 :,#include using namespace std; void main() cout “Hello,World!n “; cout “Im a student.n “; ,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,程序运行结果为:,Hello,World! Im a student.,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,一个C+程序是由三部分组成的,分别是:注释部分、编译预处理和程序主体。 程序的注释部分是程序员为读者作的说明,是提高程序可读性的一种方法。 每个以符号“#”开头的行,称为编译预处理行。如本例中“#include”称为编译指令。,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,在程序的主体部分中,main是主函数名,函数是C+程序中最小的功能单位,每一个C+程序都必须有一个main()函数,并且main()表明了程序执行的开始点。,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,每一种编程语言都使用一组字符来构造成编程语句。用C+语言编写程序时,除了字符型数据以外,其它所有成分都只能由字符集中的字符构成。C+语言的字符集由下列字符构成:,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,26个大写英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ 26个小写英文字母:abcdefghijklmnopqrstuvwxyz 10个数字字符:0 1 2 3 4 5 6 7 8 9 特殊字符: + - * / = , . _ : ; ? “ ! # % & ( ) 空格,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,词法记号是最小的词法单元,接下来介绍C+的关键字、标识符、文字、运算符、分隔符、空白符。 关键字 C+中,关键字又称保留字,它是预先定义好的标识符,这些标识符对C+编译程序有着特殊的含义。,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,标识符 标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名等。 文字 文字是在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字。 操作符(运算符) 操作符是用于实现各种运算的符号。,2019年9月8日星期日,C+面向对象程序设计,1.3 C+程序的基本组成,分隔符 分隔符用于分隔各个词法记号或程序正文,这些分隔符不表示任何实际的操作,仅用于构造程序 。 空白 在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格、制表符、换行符和注释的总称。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,Visual C+6.0是微软公司推出的一个功能强大的可视化软件开发工具。Visual C+6.0不仅是一个C+编译器,它还有一个非常好的集成开发环境Developer Studio,包括编辑器编译器、调试器以及程序向导等组件,用它可以在编写C+程序时对程序的结构进行可视化的管理。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,本节简单介绍Visual C+6.0集成开发环境的特点、界面风格和简单工具的使用。 安装完Visual C+ 6.0后,从Windows的“开始|程序”菜单中选择Microsoft Visual Studio 6.0菜单中的Microsoft Visual C+ 6.0菜单项,就启动了Visual C+集成开发环境,出现集成开发环境的主窗口Developer Studio。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,下面通过实例说明如何利用Visual C+ 6.0创建一个C+程序。,启动Visual C+ 6.0,打开File菜单,执行New菜单命令,出现New对话框,如图1-1所示。在Project页面窗口中选择Win32 Console Application选项,创建一个Win32控制台应用程序。在Project name编辑框中输入项目名称Hello,在Location编辑框中输入保存项目的路径。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,图1-1 创建一个Win32控制台应用程序,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,在Win32 Console Application-Step1 of 1对话框中设置控制台应用程序的类型,如图1-2所示。这里我们要创建一个空项目程序,因此选择第一项An empty project,单击Finish按钮,出现New Project Information对话框,单击OK按钮,将生成一个空项目。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,图1-2 设置控制台应用程序的类型,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,向项目Hello中添加源程序文件。打开Project菜单,选择Add to Project|New,出现如图1-3所示的添加项目文件对话框。在的Files页面窗口中选择C+ Source File,在右边的File编辑框中输入C+源程序文件名称Hello,在Location编辑框中输入保存该文件的路径。单击OK按钮,在主窗口Developer Studio左边的项目工作区窗口的Souce Files文件夹目录下出现Hello.cpp文件,双击该文件,在右边的编辑窗口中输入例1-1的源程序代码。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,图1-3 添加项目文件,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,编译运行源程序Hello.cpp。打开Build菜单,选择Build Hello.exe命令项或按快捷键F7,系统开始对项目Hello进行编译、连接,同时在输出窗口中显示出编译的内容,当出现Hello.exe 0 error(s), 0 warning(s) 字样时,表示Hello.exe可执行文件已经正确无误地生成了,如图1-4所示。在Build菜单中选取Execute Hello.exe命令项或按快捷键Ctrl+F5,就可以运行刚刚生成的Hello.exe 。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,图1-4 Hello项目Developer Studio窗口,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,MSDN帮助系统。除了有关Visual C+6.0 IDE具体操作说明的联机帮助文件,Microsoft Visual Studio还提供了MSDN Library(Microsoft developer network library)组件。MSDN帮助系统是一个HTML格式的帮助文件,它所包含的内容非常丰富,包含了有关Visual Studio的编程原理、方法和应用实例等内容。并且使用MSDN时可以通过访问微软网站“”获得有关MSDN的最新信息。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,用户通过选择Help菜单下的Contents命令或Search工具栏按钮就可以进入MSDN帮助系统,也可单击F1键快速获取相关内容的帮助。图1-5是MSDN Library是一般界面 。,2019年9月8日星期日,C+面向对象程序设计,1.4 Visual C+6.0开发环境,图 1-5 MSDN帮助系统,1.1 面向对象的基本概念1.2 C+面向对象程序设计1.3 C+程序的基本组成1.4 Visual C+6.0开发环境第1章 面向对象程序设计概述 1.1 面向对象的基本概念面向对象程序设计的本质是把数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体对象。对同类型对象抽象出其共性,形成类。 1.1 面向对象的基本概念面向对象程序设计方法具有4个基本特征:抽象、封装、继承和多态性 。抽象(abstract)就是忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。面向对象方法中的“类”将具有相同属性和行为的一组对象提供了抽象的描述,一个属于某类的对象称为该类的一个实例 。 1.1 面向对象的基本概念封装(encapsulation)就是把每个对象的数据(属性)和操作(行为)包装在一个类中,并尽可能隐藏对象的内部细节。一般限制直接访问对象的属性,而应通过操作接口访问,这样使程序中模块之间关系更简单、数据更安全。对程序的修改也仅限于类的内部,使得由于修改程序所带来的影响局部化 。 1.1 面向对象的基本概念多态性(polymorphism)是指允许不同类的对象对同一消息作出的响应不相同。一般类中定义的属性或行为,被特殊类继承后,可以具有不同的数据类型或者是表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义 1.1 面向对象的基本概念通过使用面向对象程序设计的抽象、封装、继承和多态性等机制,程序更易于维护、更新和升级。利用代码可重用性,程序员可以在程序中大量使用成熟的类库,从而缩短程序的开发时间,提高程序员的工作效率和程序的可靠性。1.2 C+面向对象程序设计本书介绍的主要就是使用最为广泛的C+语言和使用C+语言进行面向对象程序设计的方法。在学习编程之前,我们首先来简单了解以下C+程序的开发过程。1.2 C+面向对象程序设计程序的开发通常要经过编辑、编译、连接、运行调试这几个步骤。编辑是将源程序输入到计算机中,生成后缀为.cpp的磁盘文件。编译(compile)是将程序的源代码转换成机器语言代码。程序员编制的源程序被编译后,会生成一个目标文件,这个文件通常以.obj作为文件扩展名,该目标文件为源程序的目标代码。 1.2 C+面向对象程序设计但是编译后的程序还不能由计算机执行,因为目标代码只是一个个的程序块,需要相互衔接成为一个适应一定操作系统环境的程序整体。为了把它转换成可执行程序,必须进行连接(link)。C+程序通常是通过同时连接一个或多个目标文件以及一个或几个库而创建的。 1.2 C+面向对象程序设计库(.lib)是一组由机器指令构成的程序代码,是可连接文件。库有标准库和用户生成的库。标准库是由C+提供的,用户生成的库是由软件开发商或程序员提供的。文件与库连接的结果,即生成一个后缀为.exe的计算机可执行程序 。 1.3 C+程序的基本组成我们就从最简单的例子来分析C+程序的构成 :#include using namespace std;void main() cout Hello,World!n ; cout Im a student.n ;1.3 C+程序的基本组成程序运行结果为: Hello,World!Im a student.1.3 C+程序的基本组成一个C+程序是由三部分组成的,分别是:注释部分、编译预处理和程序主体。程序的注释部分是程序员为读者作的说明,是提高程序可读性的一种方法。每个以符号“#”开头的行,称为编译预处理行。如本例中“#include”称为编译指令。 1.3 C+程序的基本组成在程序的主体部分中,main是主函数名,函数是C+程序中最小的功能单位,每一个C+程序都必须有一个main()函数,并且main()表明了程序执行的开始点。 1.3 C+程序的基本组成每一种编程语言都使用一组字符来构造成编程语句。用C+语言编写程序时,除了字符型数据以外,其它所有成分都只能由字符集中的字符构成。C+语言的字符集由下列字符构成: 1.3 C+程序的基本组成26个大写英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ26个小写英文字母:abcdefghijklmnopqrstuvwxyz10个数字字符:0 1 2 3 4 5 6 7 8 9特殊字符: + - * / = , . _ : ; ? ! # % & ( ) 空格1.3 C+程序的基本组成词法记号是最小的词法单元,接下来介绍C+的关键字、标识符、文字、运算符、分隔符、空白符。关键字C+中,关键字又称保留字,它是预先定义好的标识符,这些标识符对C+编译程序有着特殊的含义。 1.3 C+程序的基本组成标识符标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名等。 文字文字是在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字。 操作符(运算符) 操作符是用于实现各种运算的符号。1.3 C+程序的基本组成分隔符 分隔符用于分隔各个词法记号或程序正文,这些分隔符不表示任何实际的操作,仅用于构造程序 。 空白 在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格、制表符、换行符和注释的总称。 1.4 Visual C+6.0开发环境Visual C+6.0是微软公司推出的一个功能强大的可视化软件开发工具。Visual C+6.0不仅是一个C+编译器,它还有一个非常好的集成开发环境Developer Studio,包括编辑器编译器、调试器以及程序向导等组件,用它可以在编写C+程序时对程序的结构进行可视化的管理。 1.4 Visual C+6.0开发环境本节简单介绍Visual C+6.0集成开发环境的特点、界面风格和简单工具的使用。安装完Visual C+ 6.0后,从Windows的“开始|程序”菜单中选择Microsoft Visual Studio 6.0菜单中的Microsoft Visual C+ 6.0菜单项,就启动了Visual C+集成开发环境,出现集成开发环境的主窗口Developer Studio。 1.4 Visual C+6.0开发环境下面通过实例说明如何利用Visual C+ 6.0创建一个C+程序。 启动Visual C+ 6.0,打开File菜单,执行New菜单命令,出现New对话框,如图1-1所示。在Project页面窗口中选择Win32 Console Application选项,创建一个Win32控制台应用程序。在Project name编辑框中输入项目名称Hello,在Location编辑框中输入保存项目的路径。 1.4 Visual C+6.0开发环境图1-1 创建一个Win32控制台应用程序1.4 Visual C+6.0开发环境在Win32 Console Application-Step1 of 1对话框中设置控制台应用程序的类型,如图1-2所示。这里我们要创建一个空项目程序,因此选择第一项An empty project,单击Finish按钮,出现New Project Information对话框,单击OK按钮,将生成一个空项目。 1.4 Visual C+6.0开发环境图1-2 设置控制台应用程序的类型 1.4 Visual C+6.0开发环境向项目Hello中添加源程序文件。打开Project菜单,选择Add to Project|New,出现如图1-3所示的添加项目文件对话框。在的Files页面窗口中选择C+ Source File,在右边的File编辑框中输入C+源程序文件名称Hello,在Location编辑框中输入保存该文件的路径。单击OK按钮,在主窗口Developer Studio左边的项目工作区窗口的Souce Files文件夹目录下出现Hello.cpp文件,双击该文件,在右边的编辑窗口中输入例1-1的源程序代码。1.4 Visual C+6.0开发环境图1-3 添加项目文件1.4 Visual C+6.0开发环境编译运行源程序Hello.cpp。打开Build菜单,选择Build Hello.exe命令项或按快捷键F7,系统开始对项目Hello进行编译、连接,同时在输出窗口中显示出编译的内容,当出现Hello.exe 0 error(s), 0 warning(s) 字样时,表示Hello.exe可执行文件已经正确无误地生成了,如图1-4所示。在Build菜单中选取Execute Hello.exe命令项或按快捷键Ctrl+F5,就可以运行刚刚生成的Hello.exe 。 1.4 Visual C+6.0开发环境图1-4 Hello项目Developer Studio窗口1.4 Visual C+6.0开发环境MSDN帮助系统。除了有关Visual C+6.0 IDE具体操作说明的联机帮助文件,Microsoft Visual Studio还提供了MSDN Library(Microsoft developer network library)组件。MSDN帮助系统是一个HTML格式的帮助文件,它所包含的内容非常丰富,包含了有关Visual Studio的编程原理、方法和应用实例等内容。并且使用MSDN时可以通过访问微软网站“”获得有关MSDN的最新信息。 1.4 Visual C+6.0开发环境用户通过选择Help菜单下的Contents命令或Search工具栏按钮就可以进入MSDN帮助系统,也可单击F1键快速获取相关内容的帮助。图1-5是MSDN Library是一般界面 。 1.4 Visual C+6.0开发环境图 1-5 MSDN帮助系统2019年9月8日星期日,C+面向对象程序设计,第2章 C+语言基础,2.1 数据类型和基本输入输出 2.2 运算符和表达式 2.3 基本控制结构 2.4 函数 2.5 构造类型 2.6 指针 项目设计1 控制台程序的人机界面设计,2019年9月8日星期日,C+面向对象程序设计,2.1 数据类型和基本输入输出,2.1.1 基本数据类型 2.1.2 常量 2.1.3 变量 2.1.4 基本输入、输出,2019年9月8日星期日,C+面向对象程序设计,2.1.1 基本数据类型,基本数据类型是C+系统的内部数据类型,包括bool(布尔型)、int(整型)、char(字符型)、float(单精度浮点型)、double(双精度浮点型)以及基本数据类型中short(短型)和long(长型)、signed(有符号)和unsigned(无符号)之分。 +的数据类型如下图所示:,2019年9月8日星期日,C+面向对象程序设计,2.1.1 基本数据类型,2019年9月8日星期日,C+面向对象程序设计,2.1.1 基本数据类型,使用基本数据类型要注意两点: 无符号(unsigned)和有符号(signed)的区别在于数值最高位的含义。 int型在16位系统中和在32位系统中,所占用字节数是不一样的。,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,所谓常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号(文字)表示的值。 例如10,-6,2.3,-5.7,A,b都是常量。 整型常量 整型常量就是整型常数。整型常量可以用以下三种形式表示: 十进制整数:十进制整数没有前缀。例如:237、-568、65535、1627,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,八进制整数:八进制整数要以数字0开头,即以0作为八进制数的前缀。例如:015(十进制为13)、0101(十进制为65)、0177777(十进制为65535) 十六进制整常数:十六进制整数要以数字0x或0X开头,即以0x作为十六进制数的前缀。例如:0X2A(十进制为42)、0XA0 (十进制为160)、0XFFFF(十进制为65535) 实型常量 实型常量也称为实数或者浮点数。实数只采用十进制,它有二种形式:小数形式和指数形式。,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,十进制数的形式:由数码09和小数点组成。例如:0.0、25.0、5.789、0.13、300.、-267.8230等均为合法的实数。注意,实型常量中必须含有小数点。 指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。例如:2.1E5 (等于2.1105)、3.7E-2 (等于3.710-2)、-2.8E-2 (等于-2.810-2) 实型常量默认都按双精度double型处理。但可以添加后缀“f”或“F”即表示该数为单精度浮点数。,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,字符常量 字符常量是用单引号括起来的一个字符。例如:a、b、=、+、?。有以下特点: 字符常量只能用单引号括起来,不能用双引号或其它括号。 字符常量只能是单个字符,不能是字符串。 字符可以是字符集中任意字符。但数字被定义为字符型其含义就发生了变化。如5 和5 是不同的。,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,转义字符是一种特殊的字符常量。转义字符以反斜线“”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,“n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。广义地讲,字符集中的任何一个字符均可用转义字符来表示。 字符串常量,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,字符串常量是由一对双引号括起的字符序列。例如: “CHINA” , “C program” , “$12.5” 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别 字符常量由单引号括起来,字符串常量由双引号括起来 字符常量只能是单个字符,字符串常量则可以含一个或多个字符 字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符“0” (ASCII码为0)。这是字符串结束的标志。,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,布尔常量 布尔型常量只有两个:true(真)和false(假)。 符号常量 除了前面讲过的直接用文字表示常量外,也可以为常量命名,这种代替常量本身的标识符称为符号常量。C+中用const定义符号常量。符号常量在使用之前一定要首先声明,常量声明语句的形式为: const 数据类型说明符 常量名 = 常量值;,2019年9月8日星期日,C+面向对象程序设计,2.1.2 常量,符号常量在声明时一定要赋初值,而在程序中间不能改变其值。,2019年9月8日星期日,C+面向对象程序设计,2.1.3 变量,在程序的执行过程中其值可以变化的量称为变量,变量是需要用名字来标识的。 变量的定义 就像常量具有各种类型一样,变量也具有相应的类型。变量在使用之前需要首先声明其类型和名称。变量名应是合法的标识符。变量声明语句的形式如下: ;,2019年9月8日星期日,C+面向对象程序设计,2.1.3 变量,变量的初始化 在声明一个变量的同时,也可以给它赋以初值,而这实质上就是给对应的内存单元赋值,这一过程称为初始化。 例如:int a = 3, b = 5; / 指定a,b为整型变量,a的初值为3,b的初/ 值为5 C+中变量的初始化还有另一种形式,例如:int a(3) , b(5); 需要注意的是,一个未初始化的变量不是没有数值,而是取决于变量所在系统中的存储形式,它可能是系统的默认值或无效值。,2019年9月8日星期日,C+面向对象程序设计,2.1.4 基本输入、输出,C+中使用标准输入流cin和标准输出流cout来实现数据的输入与输出。 输出流(cout) 通过cout可以输出一个整数、实数、字符及字符串,cout中的插入符“”可以连续写多个,每个后面可以跟一个表达式,该表达式通常是获得输入值的变量或对象。,2019年9月8日星期日,C+面向对象程序设计,2.2 运算符和表达式,2.2.1 算术运算符和算术表达式 2.2.2 赋值运算符和赋值表达式 2.2.3 逗号运算符和逗号表达式 2.2.4 关系运算符和关系表达式 2.2.5 逻辑运算符和逻辑表达式 2.2.6 、与sizeof运算符 2.2.7 位运算符 2.2.8 三目运算符,2019年9月8日星期日,C+面向对象程序设计,2.2 运算符和表达式,2.2.9 运算符的优先顺序 2.2.10 运算式中的类型转换,2019年9月8日星期日,C+面向对象程序设计,2.2.1 算术运算符和算术表达式,C+中由算术运算符、操作数和括号构成的表达式称为算术表达式。 C+中基本算术运算符有:+(加法),(减法或负号),*(乘法),/(除法),%(求余)。 这些算术运算符和数学运算的概念及运算方法是一致的,但有几点需要说明: “”减法运算,即是双目运算符又是单目运算符,作单目运算符时,是求负运算,例如:-5,-x等。,2019年9月8日星期日,C+面向对象程序设计,2.2.1 算术运算符和算术表达式,“/”除法运算,当参与相除运算的两个操作数均为整型时,其结果也为整型,取商的整数部分,舍去小数,因此表达式1/2的结果为0。 如果两个操作数中有一个是实型,则结果为双精度实型。 “%”求余运算,要求参与运算的操作数均为整型。例如:表达式a%b, 其值等于两数相除后的余数,即a被b除的余数,符号与a相同。 优先级和结合性。在一个包含多种算术运算的混合运算中,先乘除、后加减的运算规则是由运算符的优先级来保证的;在算术运算符中,除单目运算符外,其余运算符的结合性都是自左向右。,2019年9月8日星期日,C+面向对象程序设计,2.2.2 赋值运算符和赋值表达式,C+中赋值运算符“=”是一个双目运算符,运算的结合性为自右向左。 带有赋值运算符的表达式被称为赋值表达式,其作用就是将赋值符右边表达式的值赋给左边的操作数。 例如,x=a+b就是一个赋值表达式。 在赋值符“=”之前加上其它双目运算符可构成复合赋值符。 C+提供了10种复合赋值运算符:+=, =,*=,/=,%=,=,&=,= ,| =。 例如:a+=5 等价于a=a+5,2019年9月8日星期日,C+面向对象程序设计,2.2.3 逗号运算符和逗号表达式,在语言中逗号“,”也是一种运算符,称为逗号运算符。 逗号运算符是优先级最低的运算符。 其形式为:表达式1,表达式2,表达式n 在计算时,C+将自左向右逐个计算每个表达式,最终整个表达式的结果是最后计算的那个表达式的类型和值。 例如:j=(i=12,i+8) / 表达式值为20,2019年9月8日星期日,C+面向对象程序设计,2.2.4 关系运算符和关系表达式,比较两个量的运算符称为关系运算符。 关系运算符将两个数据进行比较,判定两个数据是否符合给定的关系。 例如,“x y”中的“”表示一个大于关系运算。 C+提供了6种关系运算符:(大于),=(大于等于),= =(等于),!=(不等于)。,2019年9月8日星期日,C+面向对象程序设计,2.2.4 关系运算符和关系表达式,有几点需要注意 “等于”关系运算符是两个等号“= =”,而不是一个等号“=”(赋值运算符)。 在6个关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 用关系运算符将两个表达式连接起来,进行关系运算的式子就是关系表达式。,2019年9月8日星期日,C+面向对象程序设计,2.2.4 关系运算符和关系表达式,关系表达式的值为逻辑值即“真”或“假”。在C+编译系统中,往往将“真”表示为“true”或1,将“假”表示为“false”或0。而任何不为0的数被认为是“真”,0被认为是“假”。 例如设x1=1,x2=2,x3=3 ,则: (x1x2)!=x3 / 表达式为1。,2019年9月8日星期日,C+面向对象程序设计,2.2.5 逻辑运算符和逻辑表达式,逻辑运算符用于将多个关系表达式或逻辑量(“真”或“假”)组成一个逻辑表达式。 C+提供了下列三种逻辑运算符: & 逻辑与 | 逻辑或 ! 逻辑非 例如,下面的表达式都是逻辑表达式: (x=1&(x5),! (x= =0),2019年9月8日星期日,C+面向对象程序设计,2.2.5 逻辑运算符和逻辑表达式,逻辑运算符的运算规则如下: & :双目运算符,当且仅当两个操作数的值都为“真”时,运算结果为“真”,否则为“假”。等价于“同时”的含义。 | :双目运算符,当且仅当两个操作数的值都为“假”时,运算结果为“假”,否则为“真”。 等价于“或者”的含义。 ! :单目运算符,当操作数的值为“真”时,运算结果为“假”;当操作数的值为“假”时,运算结果为“真”。等价于“否定”的含义。 例如,设x=5,则(x=0) & (x5)的值为“假”。,2019年9月8日星期日,C+面向对象程序设计,2.2.5 逻辑运算符和逻辑表达式,逻辑运算符的优先级如下: 逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非) &(与) |(或) 与其它种类运算符的优先关系: ! 算术运算 关系运算 & | 赋值运算,2019年9月8日星期日,C+面向对象程序设计,2.2.6 、与sizeof运算符,自增、自减运算符 单目运算符自增(+)和自减( )的作用是使整型变量的值增1或减1。这两个运算符都有前置和后置两种使用形式。 例如:+i 与i+的作用相当于i=i+1;i与i的作用相当于 i=i1。 这里需要注意的是: 自增(+)和自减( )运算符只能用于变量,而不能用于常量或表达式,如3+或(a+b)+都是不合法的。,2019年9月8日星期日,C+面向对象程序设计,2.2.6 、与sizeof运算符,+和 的结合性是“自右至左”。若自增(+)和自减( )仅用于某个变量的增1和减1,则前置和后置两种使用形式是等价的,但如果将自增(+)和自减( )和其他运算符组合在一起,则前置和后置两种使用形式在求值次序上就会产生不同: +i, i (在使用i参与其他运算之前,先使i的值加(减)1) i+,i (在使用i参与其他运算之后,再使i的值加(减)1),2019年9月8日星期日,C+面向对象程序设计,2.2.6 、与sizeof运算符,sizeof运算符 sizeof运算符用于计算操作数在内存中所占的字节数。 它使用的语法形式为: sizeof() sizeof() 运算结果返回值为“数据类型”所指定的类型或“表达式”的结果类型所占的字节数。 例如: sizeof(int) /计算整型int所占内参的字节数 sizeof(“hello“)/计算字符串常量的实际长度,2019年9月8日星期日,C+面向对象程序设计,2.2.7 位运算符,位运算符是对操作数按其在计算机内表示的二进制数逐位地进行逻辑运算或移位运算。 C+语言提供了6种位运算: 位逻辑运算符 “按位与”运算符& 运算规则:参加运算的两个操作数,如果两个数相应位的值都是1,则该位的结果值为1,否则为0。 例如:如果要保留整数a的低字节,屏蔽掉其高字节,只需要将a和b进行按位与运算即可,其中b的高字节每位置为0,低字节每位置为1,即 00101010 01010010 & 00000000 11111111 = 00000000 01010010,2019年9月8日星期日,C+面向对象程序设计,2.2.7 位运算符,“按位或”运算符| 运算规则:参加运算的两个操作数,如果两个数相应位的值都是0,则该位的结果值为0,否则为1. 例如:如果把a的第10位置为1,而且不要破坏其它位,可以对a和b进行“按位或”运算,其中b的第10位置为1,其它位置为0,即 00100000 01010010 | 00000010 00000000 = 00100010 01010010 “按位异或”运算符 运算规则:参加运算的两个操作数,如果两个数的相应位的值不同,则该位的结果值为1,否则为0。 例如:如要把a的奇数位翻转,可以对a和b进行“按位异或”运算,其中b的奇数位置为1,偶数位置为0,即 00000000 01010010 01010101 01010101 = 01010101 00000111,2019年9月8日星期日,C+面向对象程序设计,2.2.7 位运算符,“按位取反”运算符 运算规则:对一个操作数的每一位都取反,即将1变为0,0变为1。 移位运算符 左移运算符 运算规则:对运算符左边的操作数的每一位全部左移右边运算量表示的位数,右边空出的位补0。 左移1位相当于该数乘以2,左移n位相当于该数乘以2n。 例如:char a=0x21; 则a2的过程 001000012=10000100 即 a2的值为0x84。,2019年9月8日星期日,C+面向对象程序设计,2.2.7 位运算符,右移运算符 运算规则:对运算符左边的运算量的每一位全部右移右边运算量表示的位数,右边低位被移出去舍弃掉,空出的高位补0还是补1,分两种情况 对无符号数进行右移时,空出的高位补0。这种右移称为逻辑右移。 例如:unsigned char a=0x8a; a: 10001010 等于十进制数138 a1:01000101 0 等于十进制数69 补 0 舍弃 对带符号数进行右移时,空出的高位全部以符号位填补。即正数补0,负数补1。这种右移称为算术右移。,2019年9月8日星期日,C+面向对象程序设计,2.2.7 位运算符,例如char a=0x8a; a: 10001010 等于十进制数-118 a1:11000101 0 等于十进制数-59 补 1 舍弃 位赋值运算符 位运算符与赋值运算符结合可以组成位赋值运算符。,2019年9月8日星期日,C+面向对象程序设计,2.2.8 三目运算符,C+中唯一的三目运算符是条件运算符 语法格式为: ? : “条件表达式”是C+中可以产生“真”和“假”结果的任何表达式,如果条件表达式的结果为“真”,则执行表达式1,否则执行表达式2。例如: n = (ab) ? 1: 0; /如果ab成立,则n的 /值为1,否则为0,2019年9月8日星期日,C+面向对象程序设计,2.2.9 运算符的优先顺序,运算符优先顺序如下表:,2019年9月8日星期日,C+面向对象程序设计,2.2.9 运算符的优先顺序,2019年9月8日星期日,C+面向对象程序设计,2.2.10 运算式中的类型转换,当表达式中出现了多种类型数据的混合运算时,往往需要进行类型转换。表达式中的类型转换分为两种:自动转换和强制转换。 自动转换 自动转换的基本原则是将数据类型按照从低到高的顺序进行转换。类型越高,数据的表示范围越大,精度也越高,各种类型的高低顺序如下: char、short、int、unsigned、long、 unsigned long、float、double,2019年9月8日星期日,C+面向对象程序设计,2.2.10 运算式中的类型转换,自动转换遵循以下规则 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。 char型和short型参与运算时,必须先转换成int型。 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边量的数据类型长度长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。,2019年9月8日星期日,C+面向对象程序设计,2.2.10 运算式中的类型转换,强制转换 强制类型转换是通过类型说明符和括号来实现的,其一般形式为: () 或 () 例如: (float) a / 把a转换为实型 (int)(x+y) / 把x+y的结果转换为整型,2019年9月8日星期日,C+面向对象程序设计,2.3 基本控制结构,2.3.1 表达式语句、空语句和复合语句 2.3.2 选择控制语句 2.3.3 循环控制语句 2.3.4 break和continue语句 实训2 程序控制结构的应用,2019年9月8日星期日,C+面向对象程序设计,2.3.1 表达式语句、空语句和复合语句,顺序结构程序就是由顺序执行语句组成的,程序运行是按照书写的顺序进行,不发生控制转移,所以它是最简单的。 表达式语句 表达式语句由表达式后加一个分号构成。 例如:a+b; num=3; 空语句 空语句仅由一个分号构成。 例如: ;就是一个空语句 复合语句 复合语句是由一对大括号括起来的两条或两条以上的语句构成的。,2019年9月8日星期日,C+面向对象程序设计,2.3.1 表达式语句、空语句和复合语句,例如: 需要注意的是,在复合语句中定义的变量只作用于该复合语句的范围,而在复合语句外,这些变量却不能被调用。,void main() t=x ; x=y ; y=t ; /复合语句 ,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,选择结构是用来判断所给定的条件是否满足,并根据判定的结果(真或假)决定哪些语句被执行。 用if语句实现选择结构 if语句是专门用来实现选择结构的语句。它根据给定的条件进行判断,以决定执行某个分支程序段。 其语法形式为: if () else ,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,例如: if (xy) max=x; else max=y; if语句中的语句2可以为空。当语句2为空 时,else可以省略。 if语句的嵌套 处理多分支的情况时,C+语言允许在if 或 if else 中的语句1或语句2部分中再使用if或 if else语句,这种设计方法称为嵌套。 if语句的嵌套中,else部分总是与前面最靠近的、还没有配对的if配对。,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,例如:比较两个数的大小,#include using namespace std; void main() int x,y; coutxy; if(x!=y) if(xy) couty“endl; else cout“xy“endl; else cout“x=y“endl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,如果if语句的嵌套都是发生在else分支中,就可以应用if else if语句。语法形式为: if () ; else if () ; else if () ; 例如:求分段函数y=f(x)的值,f(x)的表达式如下: x2 1 (x1),2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,#include using namespace std; void main() float x,y; coutx; if(x=-1 ,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,switch语句 C+语言提供了直接实现多分支选择结构的语句:switch语句,称为多分支语句,也叫开关语句。 switch语句的语法形式如下: switch () case :语句1;break; case :语句2;break; case :语句n;break; default:语句 n+1;break; ,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,使用switch语句需要注意的是: switch后面的表达式可以是整型、字符型、枚举型,而case后面的常量表达式的类型必须与其匹配。 每个case后面常量表达式的值必须各不相同,各case及default子句的先后次序不影响程序执行结果。 每个case分支可以有多条语句,但不必用。 case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句,否则会从入口点开始一直执行到switch结构的结束点。 当若干分支需要执行相同操作时,可以使多个case分支共用一组语句。,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,例如:用switch语句实现计算器的简单功能。,#include using namespace std; void main() float x,y; /运算数 char oper; /运算符 coutxopery;,2019年9月8日星期日,C+面向对象程序设计,2.3.2 选择控制语句,switch(oper) case +: cout“x+y=“x+yendl; break; case -: cout“x-y=“x-yendl; break; case *: cout“x*y=“x*yendl; break; case /: if(y=0) cout“divisor is zero!n“; break; cout“x/y=“x/yendl; break; default: cout“operator has no effect!n“; ,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,C+中提供了三种循环控制语句:while语句、do-while语句和for语句。 while语句 while语句的语法形式如下: while () 其中表达式是循环条件,语句为循环体。执行顺序是:先判断表达式的值,当表达式为真时便开始执行while循环体中的语句,然后反复执行,每次执行都会判断表达式是否为真,直到有一次执行循环体后条件表达式的值为假时终止。,2019年9月8日星期日,2.3.3 循环控制语句,例如:用while语句求100以内的奇数之和。,#include using namespace std; void main() int i=1,sum=0; while(i=100) sum+=i; i+=2; cout“sum=“sumendl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,使用while语句需要注意的有: 如果循环体有多个语句时, 要用大括号把它们括起来,以复合语句形式出现。 循环体中必须有修改条件表达式的语句,可以使条件由成立转为不成立,从而结束循环。否则如果开始时条件为真,就会永远为真,使循环体永远重复执行下去,称为“死循环”。 do-while语句 do-while语句的语法形式如下: do while (); 执行顺序是:先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,例如:用do-while语句求100以内的奇数之和。,#include using namespace std; void main() int i=1,sum=0; do sum+=i; i+=2; while(i=100); cout“sum=“sumendl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,for语句 for语句的语法形式如下: for(表达式1;表达式2;表达式3) 其中, 表达式1:给循环控制变量赋初值; 表达式2:循环条件,是一个逻辑表达式,它决定什么时候退出循环; 表达式3:循环变量增值,规定循环控制变量每循环一次后按什么方式变化。 for语句的执行流程是:首先计算一次表达式1的值,再计算表达式2(循环控制条件)的值,并根据表达式2的值判断是否执行循环体。,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,例如:用for语句求100以内的奇数之和。,#include using namespace std; void main() int i,sum; sum=0; for(i=1;i=100;i+=2) sum+=i; cout“sum=“sumendl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,使用for语句需要注意的是: 表达式1、表达式2、表达式3都可以省略,但分号“;”不能省略。若表达式1省略或者是与循环条件无关的其他表达式,则应该在for语句之前给循环控制条件赋初值。若表达式2省略,则循环将无终止地进行下去。若表达式3省略或者是与循环条件无关的其他表达式,则应该在循环体中另有语句改变循环条件,以保证循环能正常结束。 表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,既可以是给循环变量赋初值,也可以是与循环变量无关的其它表达式。 例如: for(i=1,sum=0;i=100;sum+=i,i+=2) ;,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,循环结构与选择结构的嵌套 循环结构与选择结构可以互相嵌套,以实现复杂算法。 例如:输入一个整数,求出它的所有因子。,#include using namespace std; void main() int n,k; coutn; cout“Number “n“ Factors “; for(k=1;k=n;k+) if(n%k=0) coutk“ “; coutendl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,例如:编写程序打印以下图案: * * * * * * * * * * * * * * * * * * * * * * * * *,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,#include using namespace std; void main() int i,j,n=4; for(i=1;i=n;i+) /输出前4行图案 /在图案左侧空30列 for(j=1;j=30;j+) cout ; for(j=1;j=8-2*i;j+) cout ; for(j=1;j=2*i-1;j+) cout*; coutendl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.3 循环控制语句,for(i=1;i=n-1;i+) /输出后3行图案 /在图案左侧空30列 for(j=1;j=30;j+) cout ; for(j=1;j=7-2*i;j+) cout*; coutendl; ,2019年9月8日星期日,C+面向对象程序设计,2.3.4 break和continue语句,C+转移语句包括break、continue、goto和return语句。转移语句的作用是改变程序的顺序执行流程,将程序执行流程转移到程序其他地方。 break语句 break语句可用在switch多分支结构和循环结构中。在switch结构中,break语句用于跳出switch结构。在循环结构中,break语句用于跳出循环,即程序遇到break语句时提前结束循环,执行循环外的下一条语句。,2019年9月8日星期日,C+面向对象程序设计,2.3.4 break和continue语句,例如:用穷举法找出110之间的质数并显示出来。 代码见教材P29P30 continue语句 continue语句只用于循环结构。当遇到continue语句时,程序只跳过continue语句后的其余语句,即仅结束本次循环,并直接进入下一次循环。 例如:输出100以内能被3整除且个位数为6的所有整数。 代码见教材例 2-18,2019年9月8日星期日,C+面向对象程序设计,实训2 程序控制结构的应用,实训说明 在实训中,我们要实现的功能是验证哥德巴赫猜想,即任一充分大的偶数可以用两个素数之和表示。 程序分析 先不考虑怎样判断一个数是否为素数,而从整体上对这个问题进行考虑。我们可以这样做:读入一个偶数num,将它分成p和q两部分,使得num=p+q。那么怎样分呢?可以令p从2开始,每次增加1,而令q=num-p,如果p、q均为素数,则正为所求,否则令p=p+1再试。,2019年9月8日星期日,C+面向对象程序设计,实训2 程序控制结构的应用,算法如下: 读入大于3的偶数num。 p=1 do p=p+1; q=num-p; 判断p是否素数? 判断q是否素数? while(p、q有一个不是素数) 输出num=p+q。 接下来分析第5、6步,怎样判断一个数是否为素数 要判断一个数i是否为素数,方法是用小于等于i的平方根的数依次去除i,看能否除尽,若都除不尽则i必为素数,反之则不是。 程序员代码见教材实训2,2019年9月8日星期日,C+面向对象程序设计,2.4 函数,2.4.1 函数的定义和调用 2.4.2 函数的参数传递 2.4.3 函数参数的引用传递 2.4.4 带默认形参值的函数 2.4.5 函数的嵌套与递归调用 2.4.6 内联函数 2.4.7 函数的重载 实训3 函数的应用,2019年9月8日星期日,C+面向对象程序设计,2.4.1 函数的定义和调用,函数的定义 函数定义的一般形式如下: () 函数类型规定了所定义函数返回值的类型。 函数名是一个有效的C+标识符,同一个文件中的函数不能同名。 函数体是一个语句序列,用于实现函数的具体功能。,2019年9月8日星期日,C+面向对象程序设计,2.4.1 函数的定义和调用,例如:定义一个函数,求二个数中最大者,int max(int x, int y) / 定义函数max int z; if (xy) z=x; else z=y; return z; ,2019年9月8日星期日,C+面向对象程序设计,2.4.2 函数的参数传递,C+中函数的参数传递有两种方式,一种是按值传递,另一种是地址传递或引用传递。这里先来说明按值传递的参数传递方法。 按值传递方法是把实参的值拷贝给形参,即调用函数向被调用函数传递的参数是变量本身值。 在内存中,由于形参与实参占用不同的存储单元,这时形参值的变化将不影响实参的值。,2019年9月8日星期日,C+面向对象程序设计,2.4.2 函数的参数传递,例如:交换函数的两个参数的值,#include using namespace std; / 交换函数swap(),用于交换x和y的值 void swap(int x,int y) int temp; temp=x; x=y; y=temp; cout“x=“x“, y=“yendl; ,2019年9月8日星期日,C+面向对象程序设计,2.4.2 函数的参数传递,值传递的最大好处是保持函数的独立性。在值传递的情况下,函数只有通过return来返回某个类型的值。,void main() int a=10,b=20; cout“a=“a“, b=“bendl; swap(a,b); cout“a=“a“, b=“bendl; ,2019年9月8日星期日,C+面向对象程序设计,2.4.3 函数参数的引用传递,引用 引用是C+提供的一种特殊类型的变量,定义引用类型变量实质上是给一个已定义的变量起一个别名,系统不会为引用类型变量分配内存空间,只是使引用类型变量与其相关联的变量使用同一个内存空间。 定义引用类型变量的一般格式为: / ra就是一个引用,它是变量a的别名,2019年9月8日星期日,C+面向对象程序设计,2.4.3 函数参数的引用传递,例如:为变量i声明一个引用r,在程序中分别对r和i进行计算。,#include using namespace std; void main() int i=10; int ,2019年9月8日星期日,C+面向对象程序设计,2.4.3 函数参数的引用传递,在使用引用时,需要注意的是: 定义引用类型变量时,必须将其初始化。而且引用变量类型必须与为它初始化的变量类型相同。 一旦一个引用被初始化后,就不能改为指向其他变量。 当引用类型变量的初始化值是常量时,则必须将该引用类型定义成const类型。,2019年9月8日星期日,C+面向对象程序设计,2.4.3 函数参数的引用传递,函数的引用传递 引用也可作为形参,如果将引用作为形参,则在函数中对形参所做的更改对主函数中的实参有效。 例如:引用作为函数参数的调用方式,使两数成功地进行交换。,#include using namespace std;,2019年9月8日星期日,C+面向对象程序设计,2.4.3 函数参数的引用传递,void swap(int ,2019年9月8日星期日,C+面向对象程序设计,2.4.4 带默认形参值的函数,C+允许在函数声明或定义中给一个或多个参数指定默认值。 例如,下面声明一个带默认值参数的函数fun(): void fun(int val=10); 则如下的函数调用把实参值20传递给形参: fun(20); 而如果函数调用用省略实参,则把默认值10传递给形参,如下所示: fun(); / 等同于fun(10),2019年9月8日星期日,C+面向对象程序设计,2.4.4 带默认形参值的函数,在设置函数的默认参数值时要注意: 当函数既有声明又有定义后,不能在函数定义中指定默认参数。 如果函数有多个形参,在声明和定义函数时,必须将带默认值的形参放在参数表的右部,即默认参数应按从右到左的顺序定义,在带默认值的形参右边不能有未指定默认值的形参。 在函数调用时,系统按从左到右的顺序将实参与形参结合。当实参的数目不足时,系统将按照同样的顺序用声明或定义中的默认值来补齐所缺少的参数。,2019年9月8日星期日,C+面向对象程序设计,2.4.5 函数的嵌套与递归调用,嵌套调用 函数允许嵌套调用。所谓嵌套调用就是在调用一个函数并执行该函数中,又调用另一个函数的情况。 例如: 编写一个计算组合数的程序。 计算组合数的公式如下:,2019年9月8日星期日,C+面向对象程序设计,2.4.5 函数的嵌套与递归调用,在本例中,组合数的计算用函数functionA( )进行,而它需要的阶乘计算由函数functionB( )进行。主函数main( )调用函数functionA( ),而函数functionA( )三次调用函数functionB( ),计算m!,n!,(m-n)!。计算结果返回给主函数进行输出。m和n由键盘输入。源程序代码见教材:例 2-23,2019年9月8日星期日,C+面向对象程序设计,2.4.5 函数的嵌套与递归调用,例子中函数的调用如下图所示:,2019年9月8日星期日,C+面向对象程序设计,2.4.5 函数的嵌套与递归调用,递归调用 函数可以直接或间接地调用自身,称为递归调用。 递归调用分两个阶段: 第一阶段:递推。将原问题不断分解为新的子问题,逐渐从未知向已知推进,最终达到已知条件,即递归结束的条件,这时递推阶段结束。例如求4!可以这样分解: 4! = 4 3! 3! =3 2! 2! = 2 1! 1! = 1 0! 0! = 1,2019年9月8日星期日,C+面向对象程序设计,2.4.5 函数的嵌套与递归调用,第二阶段:回归。从已知条件出发,按照递推的逆过程,逐一求值回归,最后达到递归的开始处,结束回归阶段,完成递归调用。例如求4!的回归阶段如下: 4! = 4 3! = 24 3! =3 2! = 6 2! = 2 1! =2 1! = 1 0! = 1 0! = 1 递归部分实例及代码见教材:例 2-24和 例 2-25,2019年9月8日星期日,C+面向对象程序设计,2.4.6 内联函数,当函数被调用时。若把函数体直接嵌入函数调用处,则可消除附加的现场处理的时间开销,提高程序的运行效率。当然,这样将会加大代码占用内存的空间开销。 C+提供了实现上述嵌入功能的函数,这种函数称为内联(inline)函数。内联函数一般适用于代码较短的函数。 定义一个内联函数只需在函数头前加入关键字inline。,2019年9月8日星期日,C+面向对象程序设计,2.4.6 内联函数,例如:用内联函数计算圆的面积。,#include using namespace std; inline double CalArea(double radius) /内联函数,计算圆的面积 return 3.14*radius*radius; void main() double area ,r(2.0); /r是圆的半径 area=CalArea(r); /调用内联函数求圆的面积,编译时此处被替换为 /CalArea函数体语句 coutareaendl; ,2019
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学C++面向对象程序设计-曹静-课件PPT
链接地址:https://www.renrendoc.com/p-21836494.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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