面向对象编程技术第五章.ppt
《面向对象编程技术第五章.ppt》由会员分享,可在线阅读,更多相关《面向对象编程技术第五章.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章 C+程序的结构程序的结构1.程序、软件中存在大量的实体对象程序、软件中存在大量的实体对象2.如何解决由此产生数据访问控制问题:如作用域;对象如何解决由此产生数据访问控制问题:如作用域;对象的生命周期;数据共享等等的生命周期;数据共享等等提出问题:提出问题:本章主要内容本章主要内容作用域与可见性对象的生存期数据与函数静态成员友元共享数据的保护编译预处理命令多文件结构和工程数据访问数据访问数据共享数据共享程序组织程序组织 数据访问数据访问作用域作用域1.作用域与可见性的含义。作用域与可见性的含义。作用域:指标示符在源文件中的有效作用范围 可见性:指标识符是否可以引用的问题。2.作用域
2、分类作用域分类1)函数原型作用域2)块作用域:搞清块的含义,块是由界定的相对独立一段程序空间3)类作用域:4)文件作用域:联系与区别联系与区别数据访问数据访问可见性可见性可见性是从对标识符的引用的角度引用的角度来谈的概念可见性表示从内层作用域向外层作用域内层作用域向外层作用域“看看”时能看见什么。如果如果标识在某处可见,则就可以就可以在该处引用引用此标识符。数据访问数据访问可见性可见性注意:注意:标识符应声明在先,引用在后。标识符应声明在先,引用在后。在同一作用域中,不能声明同名不能声明同名的标识符。如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。对于两个嵌套
3、的作用域,如在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符外层作用域的标识符在内层不可见在内层不可见。强龙不压地头蛇原则强龙不压地头蛇原则#includeint i;/文件作用域int main()i=5;int i;/块作用域 i=7;couti=iendl;/输出7 couti=b;if(b0)static int c;.c的作用域b的作用域什么是块:什么是块:简言之,返返 回回注意:注意:块内定义的静态变量,具有”文件作用域”类作用域类作用域 类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则设类X,X的对象x,成员M,X的函数成员f如f没有新定义同名标
4、识符M,则在f可以访问M可以这样访问:X:M(大写x);x.M(小写x)ptr-M (ptr为指向对象x的指针)下页例子类作用域类作用域class Apublic:int b;Static void prt()Cout“test”;Cout“b=“bendl;可以这样访问可以这样访问A a;a.b5;a.prt();A:prt();/如果 static prt()则正确可以的可以的 A a;a:prt();A.b=12;?返返 回回文件作用域文件作用域 在main()之外,且不在前三者作用域范围内的数据具有文件作用域int i,j;void main()请看请看 下页下页准确理解作用域整体视图
5、准确理解作用域整体视图P123块作用域类作用域文件作用域问题:问题:1.这种包含关系什么时候成立?这种包含关系什么时候成立?2.类作用域一定包含块作用域吗?例类作用域一定包含块作用域吗?例?返返 回回main()class part_clapublic:int a;void prt();part_cla pc;/出错!此时类的作用域不包含块作用域出错!此时类的作用域不包含块作用域返返 回回数据访问数据访问对象的生存期对象的生存期对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止。P124静态生存期动态生存期返返 回回静态生存期静态生存期定义:定义:生存期
6、与程序的运行期相同,称为静态生存期在文件作用域中声明的对象具有这种生存期。在函数内部声明静态生存期对象,用关键字static声明的对象。两两种种静静态态生生存存期期示例示例#includeint i=5;/文件作用域文件作用域void out();void main()couti=iendl;out();out();void out()static ct;+ct;coutct=ctendl;注意注意:i,ct具有静态生存期具有静态生存期例例:返返 回回动态生存期动态生存期定义:定义:块作用域中声明的对象是动态生存期的对象(习惯称局部生存期对象)。开始于程序执行到声明点时,结束于命名该标识符的作
7、用域结束处。示例示例什么是作什么是作用域?用域?#includevoid fun();void main()fun();fun();void fun()static int a=1;int i=5;a+;i+;couti=i,a=aendl;运行结果:i=6,a=2i=6,a=3i是动态生存期a是静态生存期例例注意:注意:1.静态生存期与程序的生成期相同,一经创建,便贯穿始终。静态生存期有局部和全局两种定义方式静态生存期有局部和全局两种定义方式2.动态生存期指临时创建,临时使用,动态内存分配3.变量的生存期与可见性的讨论 可见一定生存,但生存未必可见返返 回回联系作联系作用域用域数据访问数据访
8、问数据与函数数据与函数1.数据存储在局部对象中,通过参数传递实现共享函数间的参数传递。2.数据存储在全局对象中。3.将数据和使用数据的函数封装在类中。数据、代码结数据、代码结合方式合方式三三种种基基本本方方式式数据访问数据访问静态成员静态成员 为了解决同类同类中不同对象不同对象的间的数据、函数(代码)共享共享问题。静态成员的提出:静态成员的提出:包包括括静态数据成员静态函数成员如何定义如何定义数据访问数据访问静态成员静态成员静态数据成员用关键字static声明同类的所有对象维护该成员的同一个拷贝必须在类外定义和初始化,用:域运算符域运算符来指明所属的类。静态函数成员数据访问数据访问静态成员静态
9、成员静态函数成员 用关键字static声明 类外代码可以使用类名和域操作符来调用静态成员函数。静态成员函数只能引用属于该类的静态数据成员或静态静态数据成员或静态成员函数。成员函数。访问非静态数据成员,必须通过本类的对象来实现。为什么?下页例子例子:例子:class apublic:static int x;static prt()cout“x=“x;int a:x=0;/对静态成员初始化main()a a1;a:x=12;a:prt();a1.x=15;a1.prt();通过类访问静态成员通过对象访问静态成员注意:注意:1.静态数据成员要在文件作用域中使用类名做限制性初始化。2.静态数据成员的
10、访问方式:类名:静态数据成员 或 对象名.静态数据成员(与书上的叙述相悖)3.静态函数成员的访问方式:类名:静态数据成员 或 对象名.静态函数数成员 注意:注意:4.静态函数成员的访问对象:静态数据成员、静态函数成员 不能访问非静态数据成员5.静态成员函数可以直接通过类名:函数名的方式访问静态数据成员,对非静态数据成员只能通过对象名来访问。参考教材P132 你明白吗?看实例下页例子Class APublic:Static void f(A a);Private:int x;Void A:f(A a)/coutx;错误couta.x;/正确返返 回回原因是,静态函数成员可以通过类名访问,而此时非
11、静态数据成员没有存储空间补充:关于静态成员的访问属性1.静态成员一般设成public访问属性,否则不能以对象方式或者类名:静态成员名的方式访问2.设成public静态成员访问属性后,可以用对象名和类名:方式访问例子:例子:class Apublic:static void show()coutin class Aendl;static int stkk;/可以用对象名访问活着类名:成员名形式访问protected:/static int stkk;类外:不予许对象名访问或者类名:成员名形式访问private:/static int stkk;不予许对象名访问或者类名:成员名形式访问;int A
12、:stkk=9;void main()A a;a.stkk=99;couta.stkkendl;coutA:stkkendl;a.show();A:show();数据共享数据共享友元友元设计思想:设计思想:友元,友元,包括友元函数友元函数和友元类友元类,是类和对象向其它类与对象开放本类、对象的的私有、保护成员的有效途径。B(A的友元)类Afriend BPrivate or protect:数据共享数据共享友元函数友元函数Class Apublic:friend 函数B 声明定义格式:定义格式:函数B定义例:简单友元函数例:简单友元函数class Apublic:A(int i)x=i;fri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 技术 第五
限制150内