面向对象的程序设计语言C课468页课件.ppt

上传人(卖家):三亚风情 文档编号:3483523 上传时间:2022-09-05 格式:PPT 页数:468 大小:3.57MB
下载 相关 举报
面向对象的程序设计语言C课468页课件.ppt_第1页
第1页 / 共468页
面向对象的程序设计语言C课468页课件.ppt_第2页
第2页 / 共468页
面向对象的程序设计语言C课468页课件.ppt_第3页
第3页 / 共468页
面向对象的程序设计语言C课468页课件.ppt_第4页
第4页 / 共468页
面向对象的程序设计语言C课468页课件.ppt_第5页
第5页 / 共468页
点击查看更多>>
资源描述

1、面向对象的程序设计语言面向对象的程序设计语言C+面向对象程序设计语言前言第1节C+语言概述第2节数据类型和表达式第3节预处理和语句第4节函数和作用域第5节类和对象(一)第6节类和对象(二)第7节继承性和派生类第8节多态性和虚函数第9节C+的I/O流库面向对象的程序设计语言 1、面向对象的程序设计语言必须支持下列概念:面向对象的程序设计语言必须支持下列概念:封装的对象封装的对象 类和实例的概念类和实例的概念 类间的继承类间的继承 多态性多态性 2、面向对象程序设计语言的基本特征:面向对象程序设计语言的基本特征:对象、类、继承性、信息隐藏、强类型化、并发性、对象、类、继承性、信息隐藏、强类型化、并

2、发性、持久性。持久性。1.1 C语言与面向对象的语言与面向对象的C(1 1)C C语言既具备高级语言的结构和编程环境,又提供类似于汇语言既具备高级语言的结构和编程环境,又提供类似于汇编语言那样的系统资源操纵能力及程序执行效率。适合解决有实时要编语言那样的系统资源操纵能力及程序执行效率。适合解决有实时要求的问题。求的问题。C语言的主要特点:(2 2)有丰富的运算符和数据类型,表达式类型多样化,可以方)有丰富的运算符和数据类型,表达式类型多样化,可以方便地实现在其他语言中较难实现的运算,对各种不同类型的程序设计便地实现在其他语言中较难实现的运算,对各种不同类型的程序设计都有良好的适应性。都有良好的

3、适应性。(3 3)以函数为基础实现程序的结构化设计,支持大型程序的多)以函数为基础实现程序的结构化设计,支持大型程序的多文件构成及单个文件独立编译,适合大型复杂程序的设计。文件构成及单个文件独立编译,适合大型复杂程序的设计。(4)语言简洁、紧凑,使用方便、灵活,书写形式自由。)语言简洁、紧凑,使用方便、灵活,书写形式自由。(5)可移植性好。)可移植性好。1.1 C语言与面向对象的语言与面向对象的C C+C+是由是由C C发展成为的以面向对象为主要特征的语发展成为的以面向对象为主要特征的语言。作为言。作为C C语言的超集,语言的超集,C+C+继承了继承了C C的所有优点,又的所有优点,又对数据类

4、型做了扩充,使得编译系统可以检查出更多对数据类型做了扩充,使得编译系统可以检查出更多类型错误。类型错误。C+C+支持面支持面向对象程序设计向对象程序设计,通过类和对象的概念,通过类和对象的概念把数据和对数据的操作封装在一起,通过派生、继承、把数据和对数据的操作封装在一起,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。使得大型复杂软件的构造和维护变得更加有效和容易。1.2C+对面向对象程序设计方法的支持 C+支持数据封装(数据抽象)C+中,类是支持数据封装的工具,对象则是数据封装的实

5、现;C+中包含有私有、公有和保护成员每个可能的消息对应一个相应的方法,方法通过函数来定义;C+中通过发送消息来处理对象 C+中允许友元破坏封装性 C+中允许函数名和运算符重载 C+支持继承性 C+支持动态联编1.2.2C+对C语言的改进 增加了新的运算符::,new,delete等;改进了类型系统,增加了安全性;引进了引用概念;允许函数重载,允许设置缺省参数,提高了编程的灵活性;引进了内联函数,提高了程序的效率;可以根据需要随时对变量进行说明;1.3C+程序的编辑、编译和运行一、编辑:源文件的扩展名为.cpp二、编译1、预处理过程词法分析:单词语法分析:构造程序的格式符号表:程序中的各种符号及

6、其属性错误处理程序:生成目标代码:目标文件扩展名.obj2、编译 过程3、连接过程:可执行文件扩展名.exe三、运行1.3C+程序的编辑、编译和运行(续)源程序.cpp目标文件.obj可执行文件.exe编译器连接器磁盘中的#include文件C+库文件.LIB1.4.1C+的字符集大小写的英文字母:az,AZ 数字字符:09 特殊字符空格!#%&*_+=-/,“;.,()1.4.2词法记号1、关键字(保留字)表1-1C+的关键字autoboolbreakcasecatchcharclassconstconst_cast continue defaultdeletedodoubledynamic

7、_cast else enumexplicitexternfalsefloatforfriendgotoifinlineintlongmutablenewoperator privateprotected publicregisterreinterpret_castreturnshortsignedsizeofstaticstatic_cast structswitchtemplate thisthrowtruetrytypedef typeidtypename unionunsigned virtualvoidvolatile while1.4.2词法记号(续)2、标识符组成规则:以字母或下

8、划线开始,其后跟零个或多个字母、数字或下划线;不能以数字开始正确标识符:Result,DoubleList,_first,first_错误标识符:1first标识符的长度任意(受编译器限制);区分字母的大小写;不能使用系统的保留字;例如:ADD,Add,add1.4.2词法记号(续)3、运算符单目双目三目运算符5、分隔符(),分隔符:4、各种文字数字字符文字串文字文字布尔文字;1.4.3空白一、空白包括:空格、制表符、换行符、注释功能:指示词法记号的开始和结束位置;二、注释/*/1.5C+程序的结构一、C+示范程序#include void main()coutHello world!endl

9、;二、C+程序的组成 预处理命令 输入输出 函数 语句 变量 其他I/O流库,提供所有的输入输出操作cout:流类对象:提取符例如:coutab;endl:换行;1.6 vc+程序设计环境 1VC+可视化集成开发环境 (1)建立控制台程序的基本步骤)建立控制台程序的基本步骤 建立一个程序,运行后输出建立一个程序,运行后输出“This is a C+program.”,源程序如下:源程序如下:#include void main()cout This is a C+program endl;创建新工程创建新工程 创建创建C+源程序文件源程序文件 编译连接和运行源程序编译连接和运行源程序 关闭、打

10、开工作区关闭、打开工作区 2VC+环境下的程序开发实例 输出结果输出结果(2)基于MFC的程序开发的基本步骤 这里以设计一个如下图所示的对话框窗口程序 建立新的工程文件建立新的工程文件 选择可视化控件拖到对话框窗口选择可视化控件拖到对话框窗口进入编辑屏幕后,首先规划对话框窗口的布局,确定进入编辑屏幕后,首先规划对话框窗口的布局,确定对话框窗口的界面。在控件面板中选择相应的控件后拖放对话框窗口的界面。在控件面板中选择相应的控件后拖放到对话框窗口的适当位置到对话框窗口的适当位置 设置控件的属性设置控件的属性 在属性对话框中设置控件的属性,如在属性对话框中设置控件的属性,如“Static Text”

11、、“Button”控件的控件的“Caption”属性属性 为新生成的类定义公有数据成员和方法为新生成的类定义公有数据成员和方法 为新的对话框类添加方法为新的对话框类添加方法 即为对话框中的某些控件添加事件代码。比如本例希即为对话框中的某些控件添加事件代码。比如本例希望单击望单击“Button1”按钮后,能将按钮后,能将IDC_Edit1中的文本复制中的文本复制到到IDC_Edit2中来,就需要为中来,就需要为“Button1”按钮添加按钮添加“单击单击”事件代码,下面是该事件的实现代码:事件代码,下面是该事件的实现代码:void CExampleDlg:OnButton1()/TODO:Add

12、 your control notification handler code hereCString strExpression;m_edit1.GetWindowText(strExpression);m_edit2.SetWindowText(strExpression);最后最后Compile或或Build程序,得到可执行的应用程序程序,得到可执行的应用程序 第2节数据类型和表达式 2.1基本数据类型 2.2常量和变量 2.3数组类型 2.4枚举类型 2.5指针和引用 2.6运算符 2.7表达式 2.8类型定义2.1基本数据类型一、基本数据类型整型int浮点型(实型)字符型char基本

13、数据类型逻辑型bool空值型void单精度浮点数float双精度浮点数double用于函数和指针2.1基本数据类型(续)二、数据类型修饰符signed:有符号unsigned:无符号short:短型long:长型说明:3)long修饰符还适用于双精度浮点数;2)上述修饰符均可用于整型和字符型;1)类型修饰符可以修饰除void、bool类型以外的其他类型;2.1基本数据类型(续)三、基本数据类型列表表2-1C+的基本数据类型类类型型名名字字宽宽(字字节节)范范围围boolfalse,truechar1-128127signed char1-128127unsigned char10255shor

14、t int2-3276832767signed short int2-3276832767unsigned short int2065535int4-21474836482147483647signed int4-21474836482147483647unsigned int404294967295long int4-21474836482147483647signed long int4-21474836482147483647unsigned long int404294967295float43.4E 10-383.4E 1038double81.7E 10-3081.7E 10308

15、long double103.4E 10-49323.4E 1049322.1基本数据类型(续)说明:1)表中的int可以省略,即在int之前有修饰符出现时,可以省略关键字int;2)单精度类型float、双精度类型double、长精度类型long double统称浮点类型;3)char类型和各种int类型统称整型类型;char类型变量在内存中以它的ASCII码值的形式存储;4)字宽(字节)取决于操作系统和编译器的实现,可用sizeof验证;2.2.1常量一、整型常量(无小数部分)1、表示方法 十进制 八进制 十六进制2、十进制表示 由09的数字组成 不能以0开始 无前缀 例:132,-345

16、3、八进制表示 由0 7的数字组成 以0为前缀 例:010,-05364、十六进制表示 由09的数字及A F的字母(大小写均可)组成 以0 x或0X为前缀 例:0 x7A,-0X3de2.2.1常量(续)5、说明:1)长整型用L(或l)做后缀表示。例如:32765L,793l;2)无符号型用U(或u)做后缀表示。例如:4352U,3100u;3)unsigned long型用后缀U(或u)和L(或l)一起表示,L与U的先后顺序无关。例如:49321ul,37825LU,41152Lu;4)无后缀时,整型常量类型按如下顺序确定:int,(unsigned),long,unsigned long十

17、进制时无2.2.1常量(续)二、浮点型常量 由整数部分和小数部分构成;只有十进制表示;一般表示形式(小数表示形式):k整数部分与小数部分可以省去一部分,但不能全部省去;k例如:5.,.25,4.072.2.1常量(续)科学表示形式:k在小数表示法后面加E(或e)表示指数;k例如:23.5E6,.032E-5,.3e10k指数部分可正可负,但必须为整数;浮点常量的缺省数据类型为double型;后缀F(或f)表示float类型;后缀l(或l)表示long double类型;2.2.1常量(续)三、字符常量 由一对单引号括起的一个字符表示;其值为所括起字符在ASCII表中的编码;所括起字符的表示方法

18、:k图形表示法该方法适用于有图形符号的可打印字符;例如:A,a,*k转义序列表示法该方法适用于所有字符,尤其是无图形符号的不可打印字符;2.2.1常量(续)K转义序列表示方法:以反斜线()开头,后跟字符的ASCII码值;K八进制表示:ddd;例如:101K十六进制表示:xhh;例如:x41表2-2C+中常用转义序列符符号含义a响铃n换行符r回车符t水平制表符(tab 键)b退格符(backspace 键)反斜线单引号双引号0空字符2.2.1常量(续)四、布尔常量有两个值:true和false;五、字符串常量(串常量,字符串)一对双引号括起的字符序列,字符序列可以包含空格、转义序列或任何其他字符

19、,这些字符不一定是C+字符集中的字符,只要C+编译器支持即可;例如:This is a string;串常量与字符常量的区别:2.2.1常量(续)由一个字符型变量存放 由一维数组存放字符常量串常量 用单引号括起 用双引号括起 字符串有一个结束符,该结束符用0表示 字符常量a在内存中占用一个字节 字符串常量a在内存中占用两个字节 可进行加、减法运算 可进行连接、拷贝运算2.2.1常量(续)六、符号常量 用来表示C+中的常量,即用一个与常量相关的标识符来替代常量;优点:增加可读性,增强可维护性;例如:PI表示3.1415926 定义方法:使用类型说明符const;例如:const int size

20、=80;定义的符号常量必须初始化;一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变;Line1:#include Line2:const double pi=3.1415;Line3:const double r;Line4:void main()Line5:Line6:double perimeter,area;Line7:perimeter=2*pi*r;Line8:pi=3.14;Line9:area=pi*r*r;Line10:coutperimeter,areaendl;Line11:2.2.1常量(续)const double r=3.2;错误错误错误,不能修

21、改错误,不能修改pi的值的值地址值2.2.2变量一、变量的三个基本要素名字类型值三要素数据值地址值int c;c=5;内存5.c地址值1000H变量类型变量名数据值二、变量的定义 可以在程序中随时定义变量,只要在该变量被使用前定义即可;定义格式:;例如:int a,b,c;double x,y,z;2.2.2变量(续)同一程序块内不可以定义同名变量;初始值k变量定义时可赋初始值;k声明格式:数据类型 标识符1(初始值1),标识符n(初始值n);数据类型 标识符1=初始值1,标识符n=初始值n;k例如:double price=15.5;int size=100;k未被初始化的变量的值或者是默认

22、值,或者是无效值,由变量类型决定;变量可被赋值,由变量名标识;2.3数组类型数目固定、类型相同的若干个变量的有序集合;2.3.1数组的定义1、格式;说明:方括号()表示数组的维;某维的大小必须是大于1的常量表达式;2、示例 int a3;char b35;const int size=80;int msize;2.3.2数组的赋值1、数组元素的表示 下标表示:;说明:k为常量表达式;k下标从0开始;k各个元素在内存中按其下标的升序顺序连续存放;指针表示:2.3.2数组的赋值(续)2、数组元素赋初值 利用初始值表(由一对花括号括起来的若干数据项组成)实现;数组元素的个数要大于等于初始值表中数据项

23、的个数;例如:int a5=1,2,3,4,5;int a4=5,4;int b23=1,2,3,4,5,6;int b23=1,2,3,4,5,6;3、数组元素的赋值例如:int m3;m0=5;m1=3;m2=1;2.3.3字符数组说明:字符数组是指数组元素是char类型的数组;注意字符常量、字符数组与字符串常量的区别;例如:char s14=a,b,c,d;字符数组char s25=a,b,c,d,0;字符数组(字符串常量)等价于char s25=abcd;char s35=abcde;char s3=abcde;2.4枚举类型枚举类型是若干个有名字的整型常量的集合;2.4.1枚举声明和

24、枚举变量一、枚举声明 enum;由若干个枚举符组成,多个枚举符之间用逗号分隔;枚举符是用标识符表示的整型常量,又称枚举常量;枚举常量的值默认为最前边的一个为0,其后的值依次加1;枚举常量的值也可显式定义,未显式定义的则在前一个值的基础上加1;2.4.1枚举声明和枚举变量(续)二、枚举变量 例如:enum day Sun,Mon,Tue,Wed,Thu,Fri,Sat;enum day Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;枚举变量的值不一定互不相同;enum ;多个枚举变量之间用逗号分隔;例如:enum day d1,d2,d3;enum day Sun,Mon,Tu

25、e,Wed,Thu,Fri,Sat d1,d2,d3;2.4.2枚举变量的值 其值是该枚举变量所属的枚举声明的枚举表的某一个枚举符;利用枚举符所表示的整型值给枚举变量赋值时,需要进行类型强制;例如:d1=Sun;d2=Sat;d3=(enum day)4;2.5.1指针1、什么是指针 指针是用来存放某个变量的地址值的一种变量;指针的类型是它所指向变量的类型;指针本身数据值的类型是unsigned long int型;例如:int a(5);int*p=&a;内存1000H5.a地址值1000H3000Hp2.5.1指针(续)2、如何定义指针 例如:int*pi;char(*pa)3;float

26、*pl;int(*pf)();char*pc;int*pp;*,*,;3、指针的赋值(内存地址值)指针必须被赋值后才可使用;一般变量、数组元素、结构成员的地址值为变量名前加运算符&;数组的地址值用该数组名表示;2.5.1指针(续)函数的地址值用该函数的名字表示;例如:int a,b10;double sin(double x);int*p=&a,*p=&b3;double(*pf)();int a10,*p=a;pf=sin;3、指针的运算 赋值运算。例如:int a,*p=&a,*q;q=p;一个指针可以加上或减去一个整数值;a与&a0相同2.5.2指针和数组1、C+中指针与数组的关系 C+

27、通过指针访问数组中的每个元素;2、一维数组的指针表示法 C+中规定:任何一个数组的名字是一个常量指针,其值是该数组的首元素的地址值;例如:int a5;数组表示法:ai,i=0,1,2,3,4指针表示法:*(a+i)2.5.2指针和数组(续)3、二维数组的指针表示法 int b25;数组表示法:biji=0,1;j=0,1,2,3,4 指针表示法:*(b+i)+j)*(bi+j)(*(b+i)j(&b00+5*i+j)4、三维数组的指针表示法(同二维)5、示例2.5.2指针和数组(续)例2.1:分析下列程序的输出结果。#include void main()static int a5=5,4,

28、3,2,1;int i,j;i=a0+a4;j=*(a+2)+*(a+4);coutiendljendl;输出644a15a03a22a31a4aa+2a+42.5.3引用 标识对象的一种机制;对对象存储地址的抽象,但引用不是值;引用有类型;变量的别名;1、定义格式&();或&=;2、初始化与赋值 定义引用时必须初始化;可以将一个引用赋给某个变量;引用可被赋值;2.5.3引用(续)示例:int a=3;int&m=a;int n=m;int*p=&m;m=m+5;3a8pm3n定义引用并初始化将引用赋值给变量a=8,对引用的操作就是对被引用者的操作3、引用的功能 用做函数的参数或函数的返回值;

29、函数不能返回对局部对象的引用;2.5.3引用(续)示例:int&f(int index,int a)int r=aindex;return r;错,r是局部对象4、指针与引用的区别 指针通过地址间接访问某个变量,引用通过别名直接访问某个变量;引用必须初始化,一旦被初始化后不得再作为其他变量的别名;正确:int&r=aindex;2.5.3引用(续)例2.4:分析下列程序的输出结果。#include void main()int val(5);int&refv=val;refv=refv+5;coutrefvendl;int*p=&refv,val1(refv);cout*ptval1、=、=、

30、=、!=前四种优先级高于后两种;2.6.3逻辑运算符 双目运算符:&、|优先级:&、|、!单目运算符:!2.6.4位操作运算符1、逻辑位运算符 单目逻辑位运算符:双目逻辑位运算符:&、|、双目逻辑位运算符的优先级:&、|、;2、移位运算符 双目运算符:;时移掉的位被丢弃,左边移出的空位补0或符号位;2.6.5赋值运算符 简单赋值运算符:=复合赋值运算符:+=、-=、*=、/=、%=、&=、|=、=、=2.6.6其他运算符1、三目运算符 格式:d1?d2:d3 功能:先计算d1,若其非零,表达式的值为d2的值,否则为d3的值;表达式类型:d2和d3中类型较高者的类型;2、逗号运算符 格式:d1,

31、d2,dn 表达式的值和类型:由最后一个表达式确定;优先级在所有运算符中最低;3、sizeof运算符2.6.6其他运算符(续)格式:功能:返回其后的类型说明符或表达式所表示的数在内存中所占的字节;4、单目运算符&和*&:取地址;*:用在指针名前,表示取指针的内容;5、强制类型运算符sizeof();或sizeof();格式:();或 ();2.6.6其他运算符(续)强制类型转换可将高类型转换为低类型,是一种不安全的转换;示例:double f(3.85);int h;h=int(f);该转换是暂时的,一次性的;示例:int a(3),m;double b;b=3.56+double(a);m=

32、a+5;2.7.1表达式的种类 由运算符和操作数组成的式子;常见的表达式k算术表达式;k逻辑表达式;k关系表达式;k赋值表达式;k条件表达式;k逗号表达式;2.7.1表达式的种类(续)注意事项:k连续的两个运算符之间用空格分隔;k可用括号来改变运算符优先级;k双目运算符的左右可以用空格符和操作数分开;k过长的表达式可分成几个表达式;2.7.2表达式的值和类型一、确定表达式的值二、表达式求值方法与确定类型的方法 先确定运算符的功能;确定计算顺序:先考虑优先级,再考虑结合性;2.7.2表达式的值和类型(续)例2.6:分析下列程序的输出结果(算术表达式)。#include void main()un

33、signed a(0 xab),b(20);a&=b;a=a;coutatby;x=y;x|=yy;y&=x+1;coutxtyendl;输出:020-1 12.7.2表达式的值和类型(续)例2.7:分析下列程序的输出结果(关系表达式)。#include void main()char x(m),y(n);int n;n=xy;coutnendl;n=x=y-1;coutn3)+(y-x=1);coutnendl;输出:1132.7.2表达式的值和类型(续)例2.8:分析下列程序的输出结果(逻辑表达式)。#include void main()int x,y,z;x=y=z=1;-x&+y&+

34、z;coutxtytzendl;+x&+y&+z;coutxtytzendl;+x&y-|+z;coutxtytzendl;输出:011122212注意逻辑表达式的求值方法2.7.2表达式的值和类型(续)例2.9:分析下列程序的输出结果(条件表达式)。#include void main()int a(3),b(4),c;c=ab?+a:+b;couta,b,cendl;c=a-b?a+b:a-3?b:a;couta,b,cendl;3,5,53,5,8注意三目运算符的判断条件输出2.7.2表达式的值和类型(续)例2.10:分析下列程序的输出结果(赋值表达式)。#include void ma

35、in()int x(1),y(3),z(5);x+=y*=z-=2;coutx,y,zendl;x*=y/=z-=x;coutx,y,zendl;x=y=z=2;z=(x+=2)+(y+=4)+2;coutx,y“,zendl;输出:10,9,3-10,-1,-74,6,122.7.2表达式的值和类型(续)例2.11:分析下列程序的输出结果(逗号表达式)。#include void main()int a,b,c;a=1,b=2,c=a+b+3;couta,b,cendl;c=(a+,a+=b,a+b);couta,b,cendl;1,2,64,2,6输出2.7.3表达式中的类型转换一、隐含转

36、换 双目运算中操作数的类型转换;是一种保值转换,转换类型由低到高;转换规则:int unsigned long unsigned long doubleshort,charfloat二、强制转换 显式强制转换(通过强制转换运算符实现);2.7.3表达式中的类型转换(续)隐式强制转换:k在赋值表达式中,当左值(赋值运算符左边的值)和右值(赋值运算符右边的值)的类型不同时,一律将右值类型强制转换为左值的类型;k在函数有返回值的调用中,将return后面的表达式的类型强制转换为该函数的类型;显式隐式赋值表达式函数返回值隐含转换强制转换类型转换2.8类型定义1、格式typedef ;例如:typede

37、f double wages,bouns;wages weekly;bouns monthly;2、自定义类型的作用 改善程序的可读性,增加所定义变量的信息 书写简练 提高程序的可移植性 第3节预处理和语句 3.1预处理功能 3.2语句 3.3选择语句 3.4循环语句 3.5转向语句3.1预处理功能一、预处理命令及预处理功能1、预处理命令 C+源程序中包含的各种编译命令在程序被正常编译之前执行;预处理命令不是C+语言的一部分;2、预处理功能 由预处理命令实现的功能;二、常用的预处理命令 文件包含命令 宏定义命令3.1预处理功能(续)以#为引导;每条预处理命令单独占用一行,同一行不能有其他预处理

38、命令和语句;三、预处理命令使用说明 条件编译命令 停止编译命令 预处理命令的位置可以放在开头、中间和结尾;预处理命令可以续行,续行符为 ;预处理命令不是语句,不能以分号(;)结束;3.1.1文件包含命令一、功能 指示C+编译器将一个文件(头文件)的内容 嵌入到该指令所在的文件中该指令所在位置处;头文件指存放与标准函数有关的信息,或者存放符号常量、类型定义、类和其他复杂类型的定义以及与程序环境相关信息的.h文件;二、格式#include 由系统提供并放在指定子目录中的头文件;#include 文件名由用户定义,放在当前目录或其他目录下的头文件或其他源文件;3.1.1文件包含命令(续)三、说明 文

39、件包含命令一般放在程序头;一条文件包含命令只能包含一个文件;文件名:myfile.h#include myfile2.h#include myfile3.h 文件包含命令可以嵌套;包含文件不易过多;3.1.2宏定义命令一、功能用来将一个标识符定义为一个字符串,该标识符称为宏名,被定义的字符串称为替换文本;二、宏定义命令格式1、两种定义格式 简单宏定义 带参数的宏定义2、简单宏定义定义符号常量,例如:#define PI 3.1415#define 3.1.2宏定义命令(续)#define与const定义符号常量的区别 const产生一个具有类型的符号#define仅产生文本替换,而不管内容是否

40、正确const double PI=3.1415;#define PI 3.1415 使用const可以定义一个局部常量,可局部在一个函数体内 用#define定义的常量的作用域是从定义时开始,直到使用#undef取消定义时为止,如果不取消定义,直到整个文件结束 使用const定义常量是一个说明语句,用分号(;)结束 使用#define定义常量是一个预处理命令,不能用分号(;)结束3.1.2宏定义命令(续)说明k书写#define命令时,与之间用空格分隔,不能使用等号连接;k使用#define定义的标识符不是变量,它只用作宏替换,不占用内存;k#define是一条预处理命令,不用分号结束,它所

41、定义的标识符等价于其后的字符串;k标识符被宏定义后,在取消这次宏定义之前,不允许重新对它进行宏定义;k宏定义可以嵌套,已定义的标识符可以用来定义新的字符串;3.1.2宏定义命令(续)说明k应写在一行上,如果需要写在多行时,需使用续行符()结束,并在其后按下回车键;k与左括号之间不能出现空格,否则空格右边都将作为宏体;k定义带参数的宏体时,宏体中与参数名相同的字符序列适当地加上括号,可以避免宏替换后出现的优先级问题;kC+中,带参数的宏定义常由内联函数取代;3、带参数的宏定义#define()3.1.2宏定义命令(续)例3.1:分析下列程序的输出结果。#include void main()in

42、t b(5);#define b 2#define f(x)b*(x)int y(3);coutf(y+1)endl;#undef b coutf(y+1)endl;#define b(3)coutf(y+1)endl;输出:82012简单宏定义带参数的宏定义b=2b=5b=33.1.2宏定义命令(续)4、替换正文中的操作符#与#:将它两边的操作数连接成一个符号;#:将它右边的操作数变成一个字符串文字;例如:#define CON(a,b)a#bdouble i=CON(5,E-10)double i=5E-10;#define STR(a)#acoutSTR(Programming is f

43、un!)endl;cout Programming is fun!endl;5、取消宏定义命令#undef 3.1.3条件编译命令一、功能用来定义某些编译内容要在满足一定条件下才参与编译,否则不参与编译;可使同一源程序在不同的编译条件下产生不同的目标代码。二、格式格式一:#ifdef#else#end if或#ifdef#end if3.1.3条件编译命令(续)格式二#ifndef#else#end if或#ifndef#end if格式三#if#elif#elif.#else#end if3.1.3条件编译命令(续)例3.2:分析下列程序的输出结果。#include#define A 10v

44、oid main()#if A0 cout0endl;#elif A0 couta0endl;#else couta=003.1.3条件编译命令(续)例3.3:避免重复引用某个头文件。/main.cpp#include myfile1.h#include myfile2.h/myfile1.h#include myhead.h/myfile2.h#include myhead.h改进:/myfile1.h#ifndef MYHEAD_H#define MYHEAD_H#include myhead.h#endif/myfile2.h#ifndef MYHEAD_H#define MYHEAD_

45、H#include myhead.h#endif 3.1.3条件编译命令(续)例3.4:用于调试。调试时:#define DEBUG 1.#if DEBUG=1 coutOKendl;#end if.调试后:#define DEBUG 0.3.1.4停止编译命令一、格式#error 二、功能当编译器遇到该指令时,显示“字符序列”,即错误信息,然后停止对该程序的编译,从而可以在编译阶段发现程序中的错误;三、示例假设country值为:US、ENGLAND、CHINA程序中有如下语句:3.1.4停止编译命令(续)/#else#error You define country incorrectly

46、#endif当country的值不是上述三者之一时,编译器将显示:然后停止编译。You define country incorrectly3.2语句1、表达式语句和空语句 表达式语句:任何一个表达式加上分号(;);空语句:只有一个分号(;)的语句;2、复合语句和分程序 复合语句:由两条或两条以上的程序构成,并由一对花括号括起;分程序:又称块结构,含有一条或多条说明语句的复合语句;3.3.1条件语句if()else if()else if().else if()else 说明:if语句可以嵌套,在此情况下,else与最近的一个没有与else配对的if配对。3.3.2开关语句switch()ca

47、se:case:.case:default 注意:在执行语句序列中如果遇到break语句,则退出switch语句,执行后面的语句;如果其后的语句序列中没有break语句,则一直执行至switch语句结束。3.3.2开关语句(续)例3.5:分析下列程序的输出结果。#include void main()int i(1),j(0),m(1),n(2);switch(i+)case 1:m+;n+;case 2:switch(+j)case 1:m+;case 2:n+;case 3:m+;n+;break;case 4:m+;n+;coutm,nendl;输出:4,53.4循环语句1、while循

48、环语句while();2、do-while循环语句do while();do-while循环与while循环的区别:do-while循环至少执行一次循环体,while循环可能一次也不执行循环体;3、for循环语句for(d1;d2;d3);4、多重循环3.5转向语句1、goto语句 格式:goto;goto语句只能在一个函数内进行转向;2、break语句 格式:break;适用情况:k用于开关语句的语句序列中,其功能是退出开关语句,执行其后的语句;k用于循环体中,其功能是用来退出该重循环;3、continue语句 格式:continue;功能:在循环体中用来结束本次循环;第4章函数和作用域 4

49、.1函数的基本概念 4.2函数的定义和说明 4.3函数的调用 4.4函数的参数 4.5内联函数 4.6函数重载 4.7异常处理基础 4.8作用域返回类型为void类型的函数抽象为过程抽象4.1函数的基本概念 函数结构:由花括号括起来的一个语句序列;函数抽象:使用标识符对语句序列进行的抽象;函数调用:函数级上的控制抽象,一种控制转移;参数化:在函数抽象中对其所操作的值进行抽象的过程;形参与实参 函数抽象与过程抽象k函数抽象的目的是进行求值k过程抽象的目的是更新对象 C+中只有函数抽象4.2.1函数的定义格式()说明:为函数返回值类型,若为void,则为过程调用;中的参数为形参,在函数被调用时进行

50、初始化,从而从被调用处获得数据;函数体4.2.2函数的说明方法(函数的声明)一、函数的说明原则 如果一个函数定义在先,调用在后,调用前可以不必说明;如果一个函数定义在后,调用在先,调用前必须说明;二、函数的说明方法(原型说明)();三、示例参数表中的参数名称可以省略4.2.2函数的说明方法(续)#include void fun1(),fun2(),fun3();void main()coutIt is in main.endl;fun2();coutIt is back in main.endl;void fun1()coutIt is in fun1.endl;fun3();coutIt

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(面向对象的程序设计语言C课468页课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|