第9章类与对象.ppt
《第9章类与对象.ppt》由会员分享,可在线阅读,更多相关《第9章类与对象.ppt(103页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章类第九章类 与与 对对 象象 C C 语言程序设计案例教程语言程序设计案例教程1随着计算机技术应用的不断深入,面向过程的程随着计算机技术应用的不断深入,面向过程的程随着计算机技术应用的不断深入,面向过程的程随着计算机技术应用的不断深入,面向过程的程序设计的开发方法已不太适应越来越复杂且高速序设计的开发方法已不太适应越来越复杂且高速序设计的开发方法已不太适应越来越复杂且高速序设计的开发方法已不太适应越来越复杂且高速发展的信息处理的要求。发展的信息处理的要求。发展的信息处理的要求。发展的信息处理的要求。2020世纪世纪世纪世纪8080年代以来,年代以来,年代以来,年代以来,面向对象方法克服了
2、传统的结构化方法在建立问面向对象方法克服了传统的结构化方法在建立问面向对象方法克服了传统的结构化方法在建立问面向对象方法克服了传统的结构化方法在建立问题系统模型和求解问题时存在的缺陷,提供了更题系统模型和求解问题时存在的缺陷,提供了更题系统模型和求解问题时存在的缺陷,提供了更题系统模型和求解问题时存在的缺陷,提供了更合理、更有效、更自然的方法,正被广大的系统合理、更有效、更自然的方法,正被广大的系统合理、更有效、更自然的方法,正被广大的系统合理、更有效、更自然的方法,正被广大的系统分析和设计人员认识、接受、应用和推广,实际分析和设计人员认识、接受、应用和推广,实际分析和设计人员认识、接受、应用
3、和推广,实际分析和设计人员认识、接受、应用和推广,实际上已成为现今软件系统开发的主流技术。上已成为现今软件系统开发的主流技术。上已成为现今软件系统开发的主流技术。上已成为现今软件系统开发的主流技术。C+C+是最具代表性的面向对象程序设计语言。是最具代表性的面向对象程序设计语言。是最具代表性的面向对象程序设计语言。是最具代表性的面向对象程序设计语言。C+C+是从是从是从是从C C发展而来,它继承了发展而来,它继承了发展而来,它继承了发展而来,它继承了C C语言的优点,语言的优点,语言的优点,语言的优点,并引入了面向对象的概念,是并引入了面向对象的概念,是并引入了面向对象的概念,是并引入了面向对象
4、的概念,是C C语言的超集,完语言的超集,完语言的超集,完语言的超集,完全兼容标准全兼容标准全兼容标准全兼容标准C C;同时也增加了一些新特性,这些;同时也增加了一些新特性,这些;同时也增加了一些新特性,这些;同时也增加了一些新特性,这些新特性使新特性使新特性使新特性使C+C+程序比程序比程序比程序比C C程序更简洁、更安全。程序更简洁、更安全。程序更简洁、更安全。程序更简洁、更安全。29.1 C+对对C的改进的改进 9.1.1 9.1.1 常规的改进常规的改进1.1.新增的关键字新增的关键字C+C+在在在在C C语言关键字的基础上增加了许多关键字,下面列出几种常用语言关键字的基础上增加了许多
5、关键字,下面列出几种常用语言关键字的基础上增加了许多关键字,下面列出几种常用语言关键字的基础上增加了许多关键字,下面列出几种常用的关键字:的关键字:的关键字:的关键字:asmasm catch class delete friend inline namespace new catch class delete friend inline namespace new operator private protected public template try using operator private protected public template try using virtual v
6、irtual 在将原来用在将原来用在将原来用在将原来用C C语言写的程序用语言写的程序用语言写的程序用语言写的程序用C+C+编译之前,应把与上述关键字同名的编译之前,应把与上述关键字同名的编译之前,应把与上述关键字同名的编译之前,应把与上述关键字同名的标识符改名。标识符改名。标识符改名。标识符改名。2.2.注释注释在在在在C C语言中,用语言中,用语言中,用语言中,用“/*”/*”及及及及“*“*/”/”作为注释分界符号,作为注释分界符号,作为注释分界符号,作为注释分界符号,C+C+除了保留这种注释除了保留这种注释除了保留这种注释除了保留这种注释方式外,还提供了一种更有效的注释方式,即用方式外
7、,还提供了一种更有效的注释方式,即用方式外,还提供了一种更有效的注释方式,即用方式外,还提供了一种更有效的注释方式,即用“/”/”导引出单行注导引出单行注导引出单行注导引出单行注释。例如:释。例如:释。例如:释。例如:intint a;/*a;/*定义一个整型变量定义一个整型变量定义一个整型变量定义一个整型变量*/intint A;/A;/定义一个整型变量定义一个整型变量定义一个整型变量定义一个整型变量这两条语句是等价的。这两条语句是等价的。这两条语句是等价的。这两条语句是等价的。C+C+的的的的“/”/”注释方式特别适合于注释内容不超注释方式特别适合于注释内容不超注释方式特别适合于注释内容不
8、超注释方式特别适合于注释内容不超过一行的注释。过一行的注释。过一行的注释。过一行的注释。“/*/”/*/”被称为块注释,被称为块注释,被称为块注释,被称为块注释,“/”/”被称为行注释。被称为行注释。被称为行注释。被称为行注释。33.3.类型转换类型转换C+C+支持两种不支持两种不同的类型转换形式:同的类型转换形式:同的类型转换形式:同的类型转换形式:intint i=0;i=0;long l=(long l=(long)ilong)i;/C/C的类型转换的类型转换的类型转换的类型转换long m=long m=long(ilong(i););/C+/C+的新风格的新风格的新风格的新风格4.4
9、.灵活的变量声明灵活的变量声明在在C C语言中语言中,局部变量说明必须置于可执行代码段之前,不允许将局部变量说明和可执,局部变量说明必须置于可执行代码段之前,不允许将局部变量说明和可执,局部变量说明必须置于可执行代码段之前,不允许将局部变量说明和可执,局部变量说明必须置于可执行代码段之前,不允许将局部变量说明和可执行代码混合起来。但在行代码混合起来。但在行代码混合起来。但在行代码混合起来。但在C+C+中,允许在代码块的任何地方说明局部变量,也就是说,中,允许在代码块的任何地方说明局部变量,也就是说,中,允许在代码块的任何地方说明局部变量,也就是说,中,允许在代码块的任何地方说明局部变量,也就是
10、说,变量可以放在任何语句位置,不必非放在程序段的开始处。例如:变量可以放在任何语句位置,不必非放在程序段的开始处。例如:变量可以放在任何语句位置,不必非放在程序段的开始处。例如:变量可以放在任何语句位置,不必非放在程序段的开始处。例如:void f()void f()intint i;i;i=1;i=1;intint j;j;j=2;j=2;/这样,可以随用随定义,这是这样,可以随用随定义,这是这样,可以随用随定义,这是这样,可以随用随定义,这是C+C+封装的要求,易读性好,而且避免了变量在远离使用封装的要求,易读性好,而且避免了变量在远离使用封装的要求,易读性好,而且避免了变量在远离使用封装
11、的要求,易读性好,而且避免了变量在远离使用处的地方声明,易引起的混淆或导致错误的问题。处的地方声明,易引起的混淆或导致错误的问题。处的地方声明,易引起的混淆或导致错误的问题。处的地方声明,易引起的混淆或导致错误的问题。45.const5.const在在在在C C语言中,使用语言中,使用语言中,使用语言中,使用#define#define来定义常量,例如:来定义常量,例如:来定义常量,例如:来定义常量,例如:#define SIZE 100#define SIZE 100C+C+提供了一种更灵活、更安全的方式来定义变提供了一种更灵活、更安全的方式来定义变提供了一种更灵活、更安全的方式来定义变提供
12、了一种更灵活、更安全的方式来定义变量,即使用类型限定符量,即使用类型限定符量,即使用类型限定符量,即使用类型限定符constconst来表示常量。所以,来表示常量。所以,来表示常量。所以,来表示常量。所以,C+C+中的常量可以是有类型的,程序员不必再中的常量可以是有类型的,程序员不必再中的常量可以是有类型的,程序员不必再中的常量可以是有类型的,程序员不必再用用用用#define#define创建无类型常量。例如:创建无类型常量。例如:创建无类型常量。例如:创建无类型常量。例如:const const intint size=100;size=100;声明成声明成声明成声明成constconst
13、的变量,实际是常量,它有地址,可的变量,实际是常量,它有地址,可的变量,实际是常量,它有地址,可的变量,实际是常量,它有地址,可以用指针指向这个值,但在程序中是不可修改的。以用指针指向这个值,但在程序中是不可修改的。以用指针指向这个值,但在程序中是不可修改的。以用指针指向这个值,但在程序中是不可修改的。使用使用使用使用#define#define有时是不安全的,如下例所示。有时是不安全的,如下例所示。有时是不安全的,如下例所示。有时是不安全的,如下例所示。5例例例例9.1#define9.1#define的不安全性。的不安全性。的不安全性。的不安全性。#include#include void
14、 main()void main()intint x=1;x=1;#define W#define W x+xx+x#define Y W-W#define Y W-W coutcoutY is YY is Yendlendl;初看程序,似乎应打印出:初看程序,似乎应打印出:初看程序,似乎应打印出:初看程序,似乎应打印出:Y is 0Y is 0但是实际的输出结果是:但是实际的输出结果是:但是实际的输出结果是:但是实际的输出结果是:Y is 2Y is 2其原因是其原因是其原因是其原因是C+C+把语句把语句把语句把语句“coutcoutY is YY is Yendlendl;”;”解释成解释
15、成解释成解释成“coutcoutY Y is is x+x-x+xx+x-x+xendlendl;”;”,如果程序中用,如果程序中用,如果程序中用,如果程序中用constconst取代了两个取代了两个取代了两个取代了两个#define#define,将不会引起这个问题。,将不会引起这个问题。,将不会引起这个问题。,将不会引起这个问题。6例例例例9.2 9.2 使用使用使用使用constconst消除消除消除消除#define#define的不安全性。的不安全性。的不安全性。的不安全性。#include#include void main()void main()intint x=1;x=1;c
16、onst W=const W=x+xx+x const Y=W-W const Y=W-W coutcoutY is YY is Yendlendl;输出:输出:输出:输出:Y is 0Y is 0另外,在另外,在另外,在另外,在ANSI CANSI C中,用中,用中,用中,用constconst定义的常量是全局常量,而定义的常量是全局常量,而定义的常量是全局常量,而定义的常量是全局常量,而C+C+中中中中constconst定义的常量根据其定义位置来决定其是局定义的常量根据其定义位置来决定其是局定义的常量根据其定义位置来决定其是局定义的常量根据其定义位置来决定其是局部的还是全局的。部的还是全
17、局的。部的还是全局的。部的还是全局的。76.6.structstructC+C+的的的的structstruct后的标识符可看作是类型名,所以定后的标识符可看作是类型名,所以定后的标识符可看作是类型名,所以定后的标识符可看作是类型名,所以定义某个变量比义某个变量比义某个变量比义某个变量比C C中更加直观。例如,在中更加直观。例如,在中更加直观。例如,在中更加直观。例如,在C C语言中:语言中:语言中:语言中:structstruct point point intint x;x;intint y y;;structstruct point p;point p;而在而在而在而在C+C+中:中:中
18、:中:structstruct point point intint x;x;intint y y;;point p;point p;这里不必再写这里不必再写这里不必再写这里不必再写structstruct。对于。对于。对于。对于unionunion,也可以照此使,也可以照此使,也可以照此使,也可以照此使用。为了保持兼容性,用。为了保持兼容性,用。为了保持兼容性,用。为了保持兼容性,C+C+仍然接受老用法。仍然接受老用法。仍然接受老用法。仍然接受老用法。在后面会看到,在后面会看到,在后面会看到,在后面会看到,C+C+的类就是对的类就是对的类就是对的类就是对C C中的中的中的中的structst
19、ruct的的的的扩充。扩充。扩充。扩充。87.作用域分辨运算符“:”“:”是作用域分辨运算符,它用于访问在当是作用域分辨运算符,它用于访问在当前作用域中被隐藏的数据项。如果有两个前作用域中被隐藏的数据项。如果有两个同名变量,一个是全局的,另一个是局部同名变量,一个是全局的,另一个是局部的,那么局部变量在其作用域内具有较高的,那么局部变量在其作用域内具有较高的优先权。的优先权。9例例例例9.3 9.3 局部变量在其作用域内具有较高的优先权,会屏蔽局部变量在其作用域内具有较高的优先权,会屏蔽局部变量在其作用域内具有较高的优先权,会屏蔽局部变量在其作用域内具有较高的优先权,会屏蔽同名的全局变量。同名
20、的全局变量。同名的全局变量。同名的全局变量。#include#include intint X=1;/X=1;/全局变量全局变量全局变量全局变量X Xintint main()main()intint X;X;X=2;/X=2;/局部变量局部变量局部变量局部变量X X coutcoutX is XX is Xendlendl;程序运行结果如下程序运行结果如下程序运行结果如下程序运行结果如下:X is 2X is 2如果希望在局部变量的作用域内使用同名的全局变量,可如果希望在局部变量的作用域内使用同名的全局变量,可如果希望在局部变量的作用域内使用同名的全局变量,可如果希望在局部变量的作用域内使用
21、同名的全局变量,可以在该变量前加上以在该变量前加上以在该变量前加上以在该变量前加上“:”:”,此时,此时,此时,此时“:X”:X”代表全局变量。代表全局变量。代表全局变量。代表全局变量。10例例例例9.4 9.4 使用域作用运算符。使用域作用运算符。使用域作用运算符。使用域作用运算符。#include#include intint X;/X;/全局变量全局变量全局变量全局变量X Xintint main()main()intint X;X=2;/X;X=2;/局部变量局部变量局部变量局部变量X X :X=1;/:X=1;/全局变量全局变量全局变量全局变量X X coutcoutlocal X
22、is Xlocal X is Xendlendl;coutcoutglobal X is:Xglobal X is:Xendlendl;程序运行结果如下程序运行结果如下程序运行结果如下程序运行结果如下:local X is 2local X is 2global X is 1global X is 111注意:作用域分辨运算符注意:作用域分辨运算符注意:作用域分辨运算符注意:作用域分辨运算符“:”只能用来访问全只能用来访问全只能用来访问全只能用来访问全局变量,不能用于访问一个在语句块外声明的同局变量,不能用于访问一个在语句块外声明的同局变量,不能用于访问一个在语句块外声明的同局变量,不能用于访
23、问一个在语句块外声明的同名局部变量。例如,下面的代码是错误的名局部变量。例如,下面的代码是错误的名局部变量。例如,下面的代码是错误的名局部变量。例如,下面的代码是错误的:void main()void main()intint X=10;/X=10;/语句块外的局部变量语句块外的局部变量语句块外的局部变量语句块外的局部变量 intint X=25;/X=25;/语句块内的局部变量语句块内的局部变量语句块内的局部变量语句块内的局部变量 :X=30;/:X=30;/编译报错:编译报错:编译报错:编译报错:X X不是全局变量不是全局变量不是全局变量不是全局变量 129.1.2 C+9.1.2 C+的
24、动态内存分配的动态内存分配C C程序中,动态内存分配是通过调用程序中,动态内存分配是通过调用程序中,动态内存分配是通过调用程序中,动态内存分配是通过调用mallocmalloc()()和和和和free()free()等库等库等库等库函数来实现的,而函数来实现的,而函数来实现的,而函数来实现的,而C+C+给出了使用给出了使用给出了使用给出了使用new new 和和和和deletedelete运算符运算符运算符运算符进行动态内存分配的新方法。进行动态内存分配的新方法。进行动态内存分配的新方法。进行动态内存分配的新方法。运算符运算符运算符运算符newnew用于内存分配的使用形式为:用于内存分配的使用
25、形式为:用于内存分配的使用形式为:用于内存分配的使用形式为:p=new type;p=new type;其中,其中,其中,其中,typetype是一个数据类型名,是一个数据类型名,是一个数据类型名,是一个数据类型名,p p是指向该数据类型的指是指向该数据类型的指是指向该数据类型的指是指向该数据类型的指针。针。针。针。newnew从内存中为程序分配一块从内存中为程序分配一块从内存中为程序分配一块从内存中为程序分配一块sizeof(typesizeof(type)字节大小字节大小字节大小字节大小的内存,该块内存的首地址存于指针的内存,该块内存的首地址存于指针的内存,该块内存的首地址存于指针的内存,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象
限制150内