自学考试C程序设计C笔记.pdf

上传人:奔*** 文档编号:93784114 上传时间:2023-07-11 格式:PDF 页数:122 大小:14.86MB
返回 下载 相关 举报
自学考试C程序设计C笔记.pdf_第1页
第1页 / 共122页
自学考试C程序设计C笔记.pdf_第2页
第2页 / 共122页
点击查看更多>>
资源描述

《自学考试C程序设计C笔记.pdf》由会员分享,可在线阅读,更多相关《自学考试C程序设计C笔记.pdf(122页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第一章 认识C+地对象 1.1初 识C+地函数和对象1、混合型函数C+以.c p p为文件扩展名,有且只有一个名为m a i n地主函数,因保留了这个面向过程地主函数,所以被称为混合型语言.2、注释方式 从“/*”开始,到“*/”结束,如:/*/从 开 始 到 本 行 结 束,如:/3、输入输出对象提取操作:用提取操作符“”从c i n输入流中提取字符,如:c i n a.x;插入操作:用插入操作符“”向c o u t输出流中插入字符,如:c o u t“w e”;c o u t en d l;使用标准输入(键盘输入)c i n及标准输出(屏幕输出)c o u t前,要在主函数前使用#i n

2、c l u d e 将C+标准输入输出库头文件i o st rea m将其包括.换行操作:用语句c o u t en d l;或c o u t*n ;实现,其 中en d l可以插在流地中间.如:c o u t a.xen d l a.y en d l;4、使用命名空间C+相 比C而言,可以省略“.h”标识头文件,但必须使用语句u si n gn a m esp a c e st d;来让命名空间中地对象名称曝光.因此一般地程序都要具有下面地两条语句:#i n c l u d e 包含头文件u si n g n a m esp a c e st d;使用命名空间注意C+库中代替C库中头文件地正

3、确名称,例如下面两个语句效果一样:#i n c l u d e#i n c l u d e u si n g n a m esp a c e st d;5、对象地定义和初始化定义对象包括为它命名并赋予它数据类型,一般即使初值只用来表示该对象尚未具有真正意义地值,也应将每个对象初始化.C+中利用构造函数语法实现初始化,如:I n t z(0);等同于 i n t z =0;6、函数原型及其返回值C+使用变量和函数地基本规则都是:先声明,后使用.变量有时也可边声明边使用,但必须声明,否则出错.比如对函数地调用,要在主函数之前先对调用地函数进行原型声明,如:i n tresu l t (i n t,

4、i n t);它向编译系统声明,后面有一个resu l t函数,该函数有两个整型类型地参数,函数返回整型值.函数声明时,除了默认参数(需给出默认参数地默认值)和内联函数(需给出函数体及其内语句)外,不需给出参数地变量名称,如果给出,效果也一样,如:i n t resu l t (i n t a,i n t b);和上面地声明效果一样.除构造函数与析构函数外,函数都需要有类型声明.如i n t m a i n (),指 出m a i n是整数类型,返回值由ret u rn后面地表达式决定,且表达式地值必须与声明函数地类型一致.如果函数确实不需要返回值,还可用v o i d标识,一旦使用v o i

5、 d标识,函数体内就不再需要使用ret u rn语句,否则会编译出错,但可使用ret u rn;语句.C+函数有库函数(标准函数,引用时函数名外加 )和自定义函数(引用时函数名外加 ”)两类.7、const(常量)修饰符及预处理程序c o n st修饰符:用于定义符号常量.C中一般使用宏定义“#d e f i ne”定义常量,而C+中除此外,建议使用c o ns t代替宏定义,用关键字c o ns t修饰地标识符称为符号常量.因c o ns t是放在语句定义之前地,因此可以进行类型判别,这比用宏定义更安全一些.如下面两个语句是等同地,但是后者可以比前者避免一些很难发现地错误.#d i f i

6、ne B 0 F S I ZE 1 0 0c o ns t i nt B U F S I ZE 1 0 0;常量定义也可使用构造函数地初始化方法,如:c o ns t i nt k (2);等同于 c o ns t i nt k=2;因被c o ns t修饰地变量地值在程序中不能被改变,所以在声明符号常量时,必须对符号常量进行初始化,除非这个变量是用e x t e rn修饰地外部变量,如:c o ns t i nt d;X c o ns t i nt d=2;V e x t e rn c o ns t i nt d;Vc o ns t地用处不仅是在常量表达式中代替宏定义,如果一个变量在生存期内

7、地值不会改变,就应该用c o ns t来修饰这个变量,以提高程序安全性.预处理程序C+地预处理程序不是C+编译程序地一部分,它负责在编译程序地其他部分之前分析处理预处理语句,为与一般地C+十语句区别,所有预处理语句都 以 位 于 行 首 地 符 号 开 始,作用是把所有出现地、被定义地名字全部替换成对应地“字符序列”.预处理语句有三种:宏定义、文 件 包 含(也成嵌入指令)和条件编译.文件包含是指一个程序把另一个指定文件地内容包含进来,书写时可以使用引号也可以使用尖括号,前者引用自己定义地包含文件,如:#inc lud e“E:progmyf ile.h,后者引用系统提供地包含文件,如标准输入

8、输出是定义在标准库iostre am中地,引用时要包括以下两条语句:#inc lud e 包含头文件using name spac e std;使用命名空间8、程序运行结果9、程序书写格式C+地格式和c 一样,都很自由,一行可以写几条语句,但也要注意以下规则,增加可读性:括号紧跟函数名后面,但在f or和while 后面,应用一个空格与左括号隔开;数学运算符左右各留一个空格,以与表达式区别;在表示参数时,逗号后面留一个空格;在f or、d owhile 和while 语句中,合理使用缩进、一对花括号和空行;适当增加空行和程序注释以增加可读性;太长地程序分为两行或几行,并注意选取合适地分行和缩进

9、位置.1.2 认 识 C+面向过程编译地特点一、使用函数重载C+允许为同一个函数定义几个版本,从而使一个函数名具有多种功能,这称为函数重载.假设有一个函数max,分别具有以下函数原型:int max(int,int);2个整型参数地函数原型int max(int,int,int);3个整型参数地函数原型只要分别为不同参数地max编制相应地函数体,就可以实现各自地功能.二 新地基本数据类型及其注意事项1、void 是无类型标识符,只能声明函数地返回值类型,不能声明变量.2、C+还比C 多了 bool(布尔)型.3、C+只限定int和 short至少要有16位,而 long至少32位,short不

10、得长于int,int不能长于long,V C+6.0 规定int使用4 字节,这与C 使用2字节不同.4、地址运算符“&”用来取对象存储地首地址,对于数组,则数组名就是数组地首地址.如:int x=56;定义x,V C+6.0使用4 个字节存储对象56,假设存放地内存首地址用十六进制表示为006AFD EC,则语句c out&x;自动使用十六进制输出存储地首地址006AFD EC.5、C+中地常量分三种,第一种为符号常量;第二种为整数常量,有 4 种类型,分别为十进制、长整型、八进制、十六进制,并用前缀和后缀进行分类标识;第三种为浮点常量,有三种类型,分别为f loat型、long f loa

11、t型、d ouble 型,并用后缀进行分类识别.符号常量 f loat 型:后缀 F(f),如 3.2f、0.002f、52.48f浮点常量,long f loat 型:后缀 L(1),如 0.2L、4.5L、52.48L常量 L d ouble 型:无后缀,如 3,0、12.3、0.002长整型:后缀 L(l),如-456L、0L、2145857852L 整数常量 十进制:无后缀,如-32、0、123八进制:前缀 0(o),如 0123、05、032737 十六进制:前缀 OX(ox),如 0 x15,OxlA,Oxlf16、C+与 C 一样,也使用转义序列.如:0 表 示 ASCII码值为

12、零地空字符(N U LL),表示字符 A三、动态分配内存1、在使用指针时,如果不使用对象地址初始化指针,可以自己给它分配地址.对于只存储一个基本类型数据地指针,申请方式如下:ne w 类型名 s i z e 申请可以存储s i z e 个该数据类型地对象不再使用时,必须使用d e l e t e 指针名;来释放已经申请地存储空间.如:.d ou b l e *p;声明 d ou b l e 型指针p=ne w d ou b l e t s 分配3 个 d ou b l e 型数据地存储空间d e l e t e p;/释放已申请地存储空间2、C 必须在可执行语句之前集中声明变量,而C+可以在使

13、用对象时再声明或定义.3、C+为结构动态分配内存一般格式为:指针名=n e w 结构名;分配d e l e t e 指针名;释放例如给书中例1.1 地P oi nt 结构指针分配内存:p =ne w P oi nt;当不再使用这个空间时,必须使用d e l e t e p;释放空间.四、引用1、引用简单地说,就是为现有地对象起个别名,别名地地址与引用对象地地址是一样地.引用地声明方式为:数据类型&别名=对象名;,注意对象在引用前必须先初始化,另外声明中符号地位置无关紧要,比 如 i nt&a =x;、i nt&a=x;和 i nt&a=x;等效.例:i nt x =5 6;定义并初始化xi n

14、t&a =x;声明a是x地引用,二者地址相同i nt&r=a;声明r是a地引用,二者地址相同r=25;改变r,则a和x都同步变化2、所谓 引用”,就是将一个新标识符和一块已经存在地存储区域相关联.因此,使用引用时没有分配新地存储区域,它本身不是新地数据类型.可以通过修改引用来修改原对象,但是不能有空引用,在程序中必须确保引用是和一块正确地存储区域关联.引用通常用于函数地参数表中或作为函数地返回值.前者因为使用引用作为函数参数不产生临时对象,可提高程序执行效率和安全性(4.4.3),后者则是因为引用作为函数返回值可用于赋值运算符地左边.3、引用实际上就是变量地别名,使用引用就如同直接使用变量一样

15、,引用与变量名在使用地形式上完全一样,引用只是作为一种标识对象地手段.但要注意,可以声明指向变量或引用地指针,如:i n t *p=&x;Vi n t&a=x;i n t *p=&a;V ;也可以声明指针对指针地引用,如:i n t*&p 2=p l;V (式中p l、p 2是指针,*声 明p 2是指针,&声 明p 2是p l地引用);但不能声明指针对变量地引用,如:i n t*&P=&x;X ;不能声明引用地引用,如:i n t&r=x;X ;也不能直接声明对数组地引用.4、引用地作用与指针有相似之处,它会对内存地址上存在地变量进行修改,但它不占用新地地址,从而节省开销.二者除使用形式不同,

16、本质也不同:指针是低级地直接操作内存地址地机制,可由整型数强制类型转换得到,功能强大但易出错;引用则是较高级地封装了指针地特性,不直接操作内存地址,不可由强制类型转换而得,安全性较高.5、虽然不能直接定义对数组地引用,但可以通过t y p e d e f来间接地建立对数组地引用.如:t y p e d e f i n t a r r a y 1 0;定义 i n t 型数组类型 a r r a ya r r a y a=1 2,3 4,.;定义 a r r a y 型数组 aa r r a y&b =a;定义数组a地引用b五、对指针使用c o n s t限定符1、变量地指针、指向变量地指针变量

17、、指针变量指向地变量变量地指针就是变量地地址,存放变量地址地变量是指针变量,为了表示指针变量和它所指向地变量之间地联系,在程序中用“*符号表示 指向”.例如用P代表指针变量,来存放变量a所在地内存地址,则*p代表指针变量指向地变量,也就是变量a,且|下面等式成立卜p=&a*p=*&a=a&*p=&a (*p)+=a+2、左值和右值左值是指某个对象地表达式,必须是可变地.左值表达式在赋值语句中即可作为左操作数,也可作为右操作数,如:x=5 6;和y=x;,而右值5 6就只能作为右操作数,不能作为左操作数.某些运算符如指针运算符“*”和 取 首 地 址 运 算 符 也 可 产 生 左 值,例如P是

18、一个指针类型地表达式,则“*p”是左值表达式,代表由p指向地对象,且可通过“*p=”改变这个对象地值;“&p”也是左值表达式,代表由p指向地对象地首地址,且可通过“&p=”改变这个指针地指向.3、指向常量地指针(c o n s t i n t *p=&x;*p=地操作不成立)指向常量地指针是在非常量指针声明前面使用c o n s t,如:c o n s t i n t *p;,它告诉编译器,*p是常量,不能将*p作为左值进行操作,即限定了“*p=”地操作,所以称为指向常量地指针.如:c o n s t i n t y =5 8;c o n s t i n t *p l=&y;指向常量地指针指向

19、常量y,y不能作为左值i n t x=4 5;c o n s t i n t *p=&x;只能通过左值x间接改变*p地值上式中*P不能作为左值,但可以通过“x=”改变X地值,间接改变*P地值,即c o n s t仅是限制使用*P地方式,*P仍然可以作为右值使用,还可以通过运算符&改变指针所指向地地址,但不能改变指针所指向地内存地址中地内容.4、常 量 指 针(i n t *c o n s t p=&x;p=地操作不成立)把c o n s t限定符放在*号地右边,就可使指针本身成为一个c o n s t,即常量指针.如:i n t x =5;i n t *c o n s t p=&x;式中地指针

20、本身是常量,编译器要求给它一个初始化值,这个值在指针地整个生存期中都不会改变,编译器把p看作常量地址,所以不能作为左值,即“p=”不成立,也就是说不能改变指针p所指向地地址.但这个内存地址里地内容可以使用间接引用运算符*改变其值,例 如 语 句*p=5 6;将上面地x地值改变为5 6.4、指向常量地常量指针也可以声明指针本身和所指向地对象都不能改变地“指向常量地常量指针”,这时必须要初始化指针.如:i n t x =2;c o n s t i n t *c o n s t p=&x;语句告诉编译器,*p和p都是常量,都不能作为左值,即“*p=和“p=”两操作均不成立,这 种 指 针 限 制 和

21、“*”运算符,在实际中很少用.六、泛型算法应用于普通数组1、数组中元素及位置地关系如 int a =5,6,7,8;则数组中各元素分别为:a0=5,al=6,a2=7,a3=8.a 为数组地起始地址,各元素地位置分别是:a+1 位置为5,a+2 位置为6,a+3 位置为 7,a+4 位置为8.对数组按元素位置进行操作时,不包括起始位置,如:语句 sort(a+1,a+4);,只对从a+1 位置(不含a+1 位置地元素)起到a+4 位 置(含 a+4 位置地元素)为止地各元素进行操作,即a+2,a+3,a+4三个位置上地三个元素,而不是a+1a+4 四个位置上地所有4 个元素.注意式中地a+1

22、并不是地址a 加上一个字节后地地址,而是a+lX d 得到地地址,其中d 是元素类型占用地字节数,比如C+中整型数占用4 个字节,则 a+1 位置上元素地地址就是地址a 加上4 个字节后得到地地址.2、数组不能作为整体输出,C+引入STL库提供地泛型算法,大大简化数组操作.所谓泛型算法,就是提供地操作与元素地类型无关.3、对数组内容进行升黑、输出、反转和复制等操作需要包含头文件;对数组内容进行降寨和检索等操作需要包含头文件 functional.4、假设一维数组a 和b 地长度均为L en,数据类型为T ype,则对数组内容地相关操作和语句如下:数据内容反转:reverse(a,a+Len);

23、数组元素反转排列复制数组内容:copy(a,a+Len,b);将数组a 地内容原样复制到数组breverse_copy(a,a+Len,b);逆向复制数组a 中内容到数组b数组升嘉排序:sort(a,a+Le n);默认排序方式是升嘉数组降黑排序:sort(b,b+Le n,gre ate r();数组降嘉排序检索查找数组内容:f ind (a,a+Le n,value);查找数组a中是否存在值为value地元素f ind函数返回地是位置指针,一般使用判别语句输出查找地内容,如:Type *x=f ind (a,a+Le n,value);x 是类型为 type 地指针if (x=a+Le n

24、)c out“没有值为value地数组元素”;e lse c out”有值为value地数组元素”;输出数组地内容c opy(a,a+Le n,ostre am_ite rator(c out,“字符串”);可 将ostre am_ite rator简单理解为输出流操作符,表示数组元素地数据类型,本语句将数组内容按正向送往屏幕,输出方式是将每个元素与“字符串”地内容组合在一起连续输出.如果使用空格”或换行符“n”,可以按格式输出.也可将数组内容按逆向方式送往屏幕,语句为:re ve rse _c opy(a,a+Le n,ostre am_ite rator(c out,字符串”);反转:re

25、 ve rse关 复制:c opy,re ve rse _c opy(逆向复制)键 排序:sort(默认升森,尾部加gre ate r()为降嘉)字 检索:f ind(c out,“字符串”)七 数据地简单输入输出格式1、C+提供了两种格式控制方式,一种是使用iso_base类提供地接口,另一种是使用一种称为操控符地特殊函数,操控符地特点是可直接包含在输入和输出表达式中,因此更为方便,不带形式参数地操控符定义在头文件中,带形式参数地操控符定义在头文件中.在使用操控符时,一是要正确包含它们,二是只有与符号“”连接时才起作用,三是无参数地操控符函数不能带有“()”号.2、常用操控符及其作用格式含义

26、作用d e c设置转换基数为十进制输入/输出o c t设置转换基数为八进制输入/输出h e x设置转换技术为十六进制输入/输出e n d l输出一个换行符并刷新流输出S e t p r e c i s i o n (n)设置浮点数输出精度n输出S e t w (n)设置输出数据字段宽度输出S e t f i ll(,字符,)设置c h为填充字符输出S e t i o s f la gs (f la g)设 置f la g指定地标志位输出r e s e t i o s f la gs (f la g)清 除f la g指定地标志位输出上表中操控符使用时,后四个操控符必须包含头文件,其中后两个操控

27、符地参数f la g是引用C+地 类i o s _ b a s e里定义地枚举常量,要使用限定 符“:”,下面地表中是几个常用地i o s _ b a s e定义地枚举常量,另 外f la g可由多个常量“或”起来使用,如:s e t i o s f la gs (i o s b a s e:s h o w p o i n t|i o s _b a s e:f i xe d).参 数f la g常引用地枚举常量及其含义常量名含义i o s _ b a s e:le f t输出数据按输出域左边对齐输出i o s _ b a s e:r i gh t输出数据按输出域右边对齐输出i o s _ b

28、a s e:s h o w p o s在正数前添加一个“+”号i o s _ b a s e:s h o w p o i n t浮点输出时必须带有一个小数点i o s _ b a s e:s c i e n t i f i c使用科学计数法表示浮点数i o s _ b a s e:f i xe d使用定点形式表示浮点数3、操控符使用实例使用s e t w设置输出宽度#i n c lud e#i n c lud e us i n g n a me s p a c e s t d;vo i d ma i n()c o ut s e t f i ll(*)s e t w(0)1 5 e n d l

29、s e t w(l)1 5 e n d l s e t w(2)1 5 e n d l s e t w(3)1 5 e n d l s e t w(4)1 5 e n d l;c o ut s e t w(1 6)s e t f i ll(6*0 ”e n d l;c o ut s e t i o s f la gs(i o s _ b a s e::r i gh t)设置标志位 s e t w(5)1 s e t w(5)2 s e t w(5)3;c o ut r e s e t i o s f la gs (i o s b a s e:r i gh t);清除标志位c o ut s e

30、t i o s f la gs(i o s _ b a s e:le f t)s e t w(5)1 s e t w(5)2 s e t w(5)3 e n d l;程序输出结果为:1 51 51 5*1 5*1 5*1*2*31*2*3*如上所示,s e t w (n)只对在后面紧接着地那个元素有效;当域宽n比后面要显示元素地位数少时,则不起作用,即不影响显示;使用填充字符时,n比后面要显示元素地位数大1时,才发生填充作用;要 显示1 5 个“*”号,必须取n=1 6,同时s e t f i ll后面使用“”才能全部填充为设定字符“*,否则将全部填充为空格;如果在程序中使用了设置标志,只有在

31、清除设置标志之后,才能进行新地设置.使 用 s e t p r e c i t i o n 设置浮点数输出精度c o n s t d o ub le PI=3.1 4 1 5 9 2;vo i d ma i n ()c o ut s e t p r e c i t i o n(0)PI e n d l s e t p r e c i t i o n(l)PI e n d l s e t p r e c i t i o n (2)PI e n d l s e t p r e c i t i o n (3)PI e n d l s e t p r e c i t i o n(7)PI e n d

32、l;程序输出结果为:3.1 4 1 5 933.13.1 43.1 4 1 5 9 2注意使用s e t p r e c i t i o n(i n t n)设定显示小数位数时,小数点本身也占1位,0等于不设,由系统决定(默认为最多输出5位小数),1代表显示整数数字,2才显示小数点后面地一位数.因系统只输出5位小数,所以为了将6位小数全部输出,最后一行必须设置7位才行.使用d ec、o ct、h e x设置转换基数为不同进制i n t b=1 0 0;c o u t W D e c:d ecb en d l,H ex:,h e x b e n d l,O ct:,o c t b e n d l

33、;co u t b en d l,In p u t b=;c i n b;输入 1 0 0co u t b en d l;十进制格式输出十六进制格式输出八进制格式输出co u t d ec s et i o s f l ags (i o s bas e:s ho w p o s)b en d l;c o u t MIn p u t b=;c i n b;输入1 0 0co u t b en d l ;co u t res et i o s f l ags(i o s bas e:s ho w p o s);co u t b en d l;程序输出结果为:Dec:1 0 0H ex:1 6 4O

34、 ct:1 441 44In p u t b=1 0 0 输入 1 0 01 44 因尚未转换基数,1 0 0 仍按八进制输出+1 0 0In p u t b=1 0 0 输入 1 0 0+1 0 0 已转换基数,将 1 0 0 按十进制输出1 0 0 清除f l ag指定地标志位和正数前显示地十号如上面程序,程序执行co u t o ct 语句后,将保持八进制格式输出,虽然输入 1 0 0,但输出仍按八进制,只有使用co u t d ec语句将其恢复为十进制.使用语句 co u t d ec s et i o s f l ags(i o s _ bas e:s ho w p o s)b en

35、 d l;除了 将进制恢复为十进制,还将输出设置为在正地数字前面显示“十 ”号,直到后面地语句使用清除该设置标志地语句co u t res et i o s f l ags (i o s _ bas e:s ho w p o s);执行,另外如果单独使用语句 res et i o s f l ags(i o s _ bas e:s ho w p o s);”,则不起作用.1.3程序地编辑、编译和运行地基本概念1、C+程序编制过程先使用编辑器编辑一个C+程序my cp p.cp p,又称其为C+地源程序;然后使用C+编译器对这个C+程序进行编译,产生文件my cp p.o bj;再使用连接程序(

36、又称L i n k),将my cp p.o bj 变成my cp p.ex e文件.2、C+程序编制环境及使用方法现在C+地编制一般都使用集成环境,如Vi s u al C+6.0 等,所谓集成环境,就是将C+语言地编辑、编译、连接和运行程序都集成到一个综合环境中.利用VC编制C+程序源文件地步骤如下:启动VC6.0;Fi l e 菜单一New 对话框一Pro j ect 选项卡一Wi n 32 Co n s o l e A p p l i cat i o n选项,在右边地Pro j ect n ame输入框中输入项目名称my f i l e,在右边地L o cat i o n输入框中输入存储

37、目录,然后单击0 K按键,进入Wi n 32 Co n s o l e A p p l i cat i o n制作向导地第一步,编辑C+程序文件是选择A n emp t y p ro j ect 选项,单击Fi n i s h按钮,完成设置;选中Fi l e Vi ew 选项卡,进入空项目,单击它展开树形结构,选中i n y f i l ef i l es 节点;选中So u rce Fi l e标记,再从Fi l e菜单中选n ew 命令,弹出n ew对话框;选中C+So u rce Fi l e选项,在右方地Fi l e输入框中输入C+程序文件名(my cp p),系统默认地文件扩展名为.

38、cp p,单击O K按钮,返回集成环境,并在S o u r c e F i l e 项下面产生空文件m y c p p.c p p;在右边地源代码编辑框中输入源文件;部分B u i l d 菜单项描述菜单项描 述C o m p i l e编译源代码窗口中地活动源文件B u i l d查看工程中所有文件,并对最近修改过地文件进行编译和链接Re b u i l d A l l对工程中地所有文件全部进行重新编译和连接C l e a n删除项目地中间文件和输出文件S t a r t D e b u g弹出级联菜单,主要包括有关程序调试地选项E x e c u t e运行应用程序第二章从结构到类地演变2

39、.1 结构地演化一、结构发生质地演变1、函数与数据共存C+中首先允许结构中可以定义函数,这些函数称为成员函数,形式如下:s tru c t结构名数据成员成员函数k_可以像C语言中结构变量使用结构成员地方法那样,通过C+地结构对象使用成员函数,形式如下:结构对象.成员函数2、封装性如果在定义结构时,将数据成员使用p r i v a t e关键字定义,则产生封装性,没有使用p r i v a t e定义地成员函数,默认为p u b l i c.要注意,私有地数据成员,必须通过公有地成员函数才能使用,而不能不通过公有地成员函数直接来使用,否则就会出错,这就称为数据地封装性.二,使用构造函数初始化结构

40、地对象函数名与结构同名,称为构造函数,专门用于初始化结构地对象,构造函数使用地一般形式为:构造函数名对象名(初始化参数);程序在运行时,会自动完成初始化任务.2.2 从结构演变一个简单地类1、用关键字c l a s s代 替s t r u c t,就是一个标准地类.实例:#i n c l u d e u s i n g n a m e s p a c e s t d;c l a s s P o i n t 定义类 P o i n tp r i v a t e:d o u b l e x,y;类P o i n t地数据成员p u b l i c:P o i n t ();|类P o i n t地

41、无参数构造函数P o i n t(d o u b l e a,d o u b l e b)x=a;y=b;具有两个参数地构造函数v o i d S o t x y (d o u b l e a,d o u b l e b)x=a;y=b;/成员函数,用于重新设置数据成员v o i d D i s p l a y ()c o u t x t y e n d l;成员函数,按指定格式输出数据成员类名Point具有地属性x和 y提供地操作构造函数P o i n tS e t x y用来给对象赋值D i s p l a y用来输出x和y);v o i d m a i n ()P o i n t a;定

42、义类P o i n t地对象aP o i n t b(1 8.5,1 0.6);|定义类P o i n t地对象b并初始化a.S e t x y (1 0.6,1 8.5);为对象a地数据成员赋值a.D i s p l a y。;显示对象a地数据成员b.D i s p l a y();显示对象b地数据成员)程序运行结果:1 0.6 1 8.51 8.5 1 0.62、类地示意图上例中地P o i n t类可以看作直角坐标系中地点类,其结构示意图如右:第一个方框中是类名;第二个方框中是坐标点地数据,称为属性(或称数据成员);第三个方框中表示类所提供地具体操作方法,实现预定功能地函数,这里称为成员

43、函数.2.3 面向过程与面向对象1、面向过程地方法所谓面向过程,就是不必了解计算机地内部逻辑,而把精力集中在对如何求解问题地算法逻辑和过程地描述上,通过编写程序把解决问题地步骤告诉计算机.实际上是如何使用数据x和y,以C语言就是面向过程地结构化程序设计语言,其程序设计特点就是通过函数设计,实现程序功能地模块化、结构化.但实际工作中,尽管结构化程序设计中地分而治之地想法非常好,但在结构化程序设计语言和结构化程序设计方法下却难以贯彻到底,特别是在软件规模在三四万行以上时,开发和维护就十分困难.2、面向对象地方法为了解决面向过程地方法存在地问题,人们提出了面向对象地方法.所谓对象,就是现实世界中客观

44、存在地事务.相对于过程,对象是稳定地,复杂地对象可由简单地对象组成,对象各自完成特定地功能.在面向对象程序设计中,可以将一组密切相关地函数统一封装在一个对象中,从而合理而又有效地避免全局变量地使用,更彻底地实现了结构化程序设计地思想.结构化程序设计使用地是功能抽象,而面向对象程序设计不仅能进行功能抽象,还能进行数据抽象,“对象”实际上是功能抽象和数据抽象地统一.面向对象地程序设计方法不是以函数过程和数据结构为中心,而是以对象代表来求解问题地中心环节,追求地是现实问题空间与软件系统解空间地近似和直接模拟,从而使人们对复杂系统地认识过程与系统地程序设计实现过程尽可能地一致.3、软件开发过程及发展趋

45、势软件开发者将被开发地整个业务范围称为问题域,软件开发是对给定问题求解地过程,分为两项主要内容:认 识 和 描 述 认识”就是在所要处理地问题域范围内,通过人地思维,对该问题域客观存在地事务以及对所要解决地问题产生正确地认识和理解.“描述”就是用一种语言把人们对问题域中事务地认识、对问题及解决方法地认识描述出来,最终地描述必须使用一种能够被机器读懂地语言,即编程语言.人们习惯使用地自然语言和计算机能够理解并执行地编程语言之间存在很大地差距,称 为“语言地鸿沟”.由于人地认识差距,问题域和自然语言之间也有缝隙,机器语言和自然语言之间鸿沟最宽,程序设计语言地发展趋势则是为了鸿沟变窄.2.4 C+面

46、向对象程序设计地特点面向对象地程序设计具有抽象、封装、继承和多态性等关键要素.1、对象C+中地对象是系统中用来描述客观事物地一个实体,是构成系统地一个基本单位,C+中使用对象名、属性和操作三要素来描述对象,如右所示:对象名用来标识一个具体对象;用数据来表示对象地属性,一个属性就是描述对象静态特征地一个数据项;操作是描述对象动态特征(行为)地一个函数序列(使用函数实现操作),也称方法或服务.数据称为数据成员,函数称为成员函数,一个对象由一组属性和对这组属性进行操作地成员函数构成.对象名8.9)例:用简单对象表示平面上地A (3.5,6.4)和B (8.5,两个坐标点.可用如下地对象结构图表示A和

47、B地对象结构:属 性1属性2属性nAB操 作1x (3.5)y (6.4)x (8.5)y (8.9)操 作2D i spla y ();S et x y ();M ov e();D i spla y ();操作nS et x y ();M ov e();2、抽象和类抽象是一种从一般地观点看待事物地方法,即集中于事物地本质特征,而不是具体细节或具体实现.面向对象地方法把程序看作是由一组抽象地对象组成地,如果把一组对象地共同特征进一步抽象出来,就形成了“类”地概念.对于一个具体地类,它有许多具体地个体,这些个体叫做“对象”,同一类地不同对象具有相同地行为方式.一个对象是由一些属性和操作构成地,对

48、象地属性和操作描述了对象地内部细节,类是具有相同地属性和操作地一组对象地集合,它为属于该类地全部对象提供了统一地抽象描述,其内部包括属性和操作两个主要部分.类地作用是定义对象,I类和对象地关系如同一个模具和其铸造出来地格蓬存地关系,对象之间就像是同一模具铸出地零件,模样相同,铸造材料可能不同.类给出了属于该类地全部对象地抽象定义,而对象则是符合这种定义地实体.所谓一个类地所有对象具有相同属性和操作,是指它们地定义形式(即属性地个数、名称、数据类型)相同,而不是说每个对象地属性值都相同.3、封装为了保护类地安全,即限制使用类地属性和操作,需要将类封装起来.gg就像用同一个模具铸造零件,各零件使用

49、地材料(数据成员)和铸造工艺(成员函数)均不同,每一种材料都有其对应地铸造工艺,材料与铸造工艺是成套使用(封装)地,虽然铸出零件地模样一样,但如果用错了铸造工艺,就可能出废品.所 谓“封装”,就是把对象地属性和操作结合成一个独立地系统单位,并尽可能隐蔽对象地内部细节.按照面向对象地封装原则,一个对象地属性和操作是紧密结合地,对象地属性只能由这个对象地操作来存取.对象地操作分为内部操作和外部操作,前者只供对象内部地其他操作使用,不对外提供;后者对外提供一个信息接口,通过这个接口接受对象外部地消息并为之提供操作(服务).对象内部数据结构地这种不可访问性称为信息(数据)隐藏.数据封装给数据提供了与外

50、界联讯地标准接口,只有通过这些接口,使用规范地方式,才能访问这些数据,同时程序员也只需要和接口打交道,而不必了解数据地具体细节.由此可见,封装要求一个对象应具备明确地功能,并具有接口以便和其他对象相互作用,同时,对象地内部实现(代码和数据)是受保护地,外界不能访问它们,这样封装一方面使得程序员在设计程序时能专注于自己地对象,同时也切断了不同模块之间数据地非法使用,减少了出错.在类中,封装是通过存取权限实现地,例如每个类地属性和操作分为私有和公有两种类型,对象地外部职能访问对象地公有部分,而不能直接访问对象地私有部分.4、继承继承是一个类可以获得另一个类地特性地机制,支持层次概念,通过继承,低层

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

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