C++语言程序设计实验问题详解-大数据地共享与保护.docx
《C++语言程序设计实验问题详解-大数据地共享与保护.docx》由会员分享,可在线阅读,更多相关《C++语言程序设计实验问题详解-大数据地共享与保护.docx(29页珍藏版)》请在课桌文档上搜索。
1、实验05数据的共享与保护(2学时)(第5章数据的共享与保护)一、实验目的(1)观察程序运行中变量的作用域、生存期和可见性。(2)学习类的静态成员的使用。学习多文件结构在C+程序中的使用。二、实验任务5_1运行下面的程序,观察变量x、y的值。/Iab5_1.cpp#includeusingnamespacestd;voidfn1();intx=1,y=2;intmain()COUt”开始.endl;coutx=xendI;cout,y=,yendI;COUt“在main()中求X和y的值.endI;intx=10,y=20;cout,x=xendI;cout,y=,yendI;COUt“进入函数
2、fn1O.,endl;f111();cout返回main()endI;coutx=xendI;cout,y=,yendI;returnO;1voidfn1Ointy=200;cout,x=xendI;couty=,yd.exe开始.=1y=2在mainC中求X和y的值.=10y三20进入函数=1y=200返回InainC=10y=20请按任意键继续.2 .(编程)实现客户机(CLIENT)类。新建一个空的项目Iab5_2,添加头文件Client.h,在其中声明类CUENT,注意使用编译预处理命令;再添加源程序文件CIient.cpp,在其中实现CUENT类,注意静态成员变量的使用方法;再添加文
3、件Iab5_2.cpp,在其中定义main。函数,测试CUENT类,观察相应的成员变量取值的变化情况。提示:访问一台服务器的客户总数。符态成员为类的属性,为所有的类的对象共同拥有。再定义两个静态成员函数,分别显示服务器名和客户总数。构造函数用于增加一个客户,析构函数用于减少一个客户。定义一个对象,再定义第二个对象,然后减少一个对象。参考程序输出结果:第 0B1B2B1 继 键 茗数名数名数名数意 器总器总器总器总任 务户务户务户务户按 服嘉靠靠客请武C:fIHDOVSsysteB32cBd.exe程序及运行结果:(1)类声明头文件Client.h/cIient.h#ifndefCLIENT_H
4、#defineCLIENT_H其中的静态成员为类的属性,为所有的类的对象共同拥有classclient(pubIic:cIient();cIientO;staticvoidChangeServerName(charss);/改变服务器名称staticvoidShowServerName();staticvoidshowCIientNum();private:staticcharSerVerName;保存服务器名,引用性说明staticintClientNUm;/记录已定义的客户(即对象)数量,引用性说明);#endif(2)类实现程序文件CIient.cpp/cIient.cpp#includ
5、e#includeclient.husingnamespacestd;client::clientOClientNum+;/增加一个对象(客户)cIient:cIientOClientNum;/减少一个对象(客户)voidclient:ChangeServerName(charsn)ServerName=Sn;)/.staticvoidclient:ShowServerName()COUt服务器名:ServerNameendl;voidcIient:showCIientNum()CoUt客户总数:ClientNumendI;必须在文件作用域的某处用类名限定进行定义性说明,这时也可以进行初始化。
6、charclient::ServerName=A,;无StatiCintclient:CIientNm=O;(3)主函数文件Iab5_2.cpp/Iab52.cpp#include#include,cIient.husingnamespacestd;voidmain()(cIient::ShowServerName();/初始状态client:showCIientNum();/类名引用力争态成员函数cIient:ChangeServerName(,B);Clienta;/增加一个客户a. ShowServerName();/对象名引用静态成员函数a.showCIientNumO;(cIient
7、b;/增加一个客户b. ShowServerName();c. showCIientNum();)/减少一个客户cIient:ShowServerName();cIient::showCIientNum();1(4)运行结果附:第5章数据的共享与保护5.1 标识符的作用域与可见性P1465.1.1 作用域作用域是一个标识符在程序正文中有效的区域。C+的作用域有:函数原型作用域、块作用域(局部作用域)、类作用域、文件作用域。1 .函数原型作用域在函数原型声明时形式参数的作用范围。例,doubIeArea(doubIradius);其中标识符radius的作用(或称有效)篦国在形参列表的左、右括号
8、之间,称标识符radius的作用域是函数原型作用域。由于在函数原型的形参表中起作用的只是形参类型,标识符并不起作用,可省略。2 .局部作用域(块作用域)例:的作用域b的作用域的作用域voidfun(inta)intb=a;cinb;if(bO)intc;形参作用域:从形参列表中的声明处开始,到整个函数体结束处止。b和C都具有块作用域,是不同的块作用域。块是一对大括号括起来的一段程序。此例,函数体是一个块,汗语句后的分支体又是一个校小的块,二者是包含关系。在块中声明的标识符,其作用域从声明处开始,一直到块结束的大括号为止。具有块作用域的变量也称为局部变量。3 .美作用域类是一组有名成员的集合,类
9、X的成员In具有类作用域,对m的访问方式如下:(1)若在X的成员函数中无同名的局部作用域标识符,则在该函数内可访问成员01。(2)通过表达式xm或X:m。这正是程序中访问对象成员的最基本方法。(3)通过Prt-m这样的表达式,其中Prt为指向X类的一个对象的指针。4 .命名空间作用域命名空间大型程序通常由不同模块构成,不同模块中的类和函数之间可能发生重名,将引发错误。命名空间可以解决类名、函数等的命名冲突。命名空间语法形式:namespace命名空间名命名空间内的各种声明(函数声明、类声明、)例namespaceSomeNscIassSomeCIass.;特殊的命名空间_全局命名空间:默认的命
10、名空间_匿名命名空间:对每个源文件是唯一的命名空间作用域一个命名空间确定了一个命名空间作用域引用其它命名空间作用域中的标识符_命名空间名:标识符名例:声明一个SomeClaSS型的对象SomeNs:SomeCIassobj1;将其它命名空间作用域的标识符暴露于当前作用域_对指定标识符using命名空间名:标识符名;_对所有标识符USingnamespace命名空间名;例5T中所声明的全局变量就具有文件作用域,它们在整个文件中都有效。例5T作用域实例。#includeusingnamespacestd;/使得在当前文件中可直接引用Std命名空间的标识符COUtinti;全局变量,文件作用域nam
11、espaceNs(infj;/在NS命名空间中的全局变量)voidmain()(i=5;文件作用域的i赋初值Ns:尸6;为全局变量j赋值/子块1usingnamespaceNs;/使得在当前块中可直接引用Ns命名空间的标识符inti;局部变量,块作用域i=7;cout=iendl;/输出7coutj=jendl;)COUti=iendI;输出5参考(cout,endI是命名空间Std中的全局变量):#incIude/usingnamespacestd;/使得在当前文件中可直接引用Std命名空间的标识符cout,endIinti;全局变量,文件作用域namespaceNsintj;/在Ns命名空
12、间中的全局变量1voidmain()(i=5;文件作用域的i赋初值Ns:j=6;为全局变量j赋值/子块1usingnamespaceNs;/使得在当前块中可直接引用Ns命名空间的标识符inti;局部变量,块作用域=7;std:couti=,istd:endI;/输出7std:cout,j=jstd:endI;)std::couti=istd::endI;/输出5)具有文件作用域的变量也称为全局变量。5.1.2可见性可50可见的标识符程序运行到某一点,能够引用到的标识符。文件作用域最大,接下来依次是类作用域和块作用域。图5-1作用域关系图.文件作用域类作用域块作用域可见性表示从内层作用域向外层作
13、用域“看”时能看到什么。作用域可见性的一般规则:_标识符声明在前,引用在后。_同一作用域,不能声明同名标识符。_在没有包含关系的不同作用域中声明的同名标识符互不影响。_在具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。例5-I中,文件作用域与块作用域相互包含。#incIudeusingnamespacestd;inti;全局变量,文件作用域namespaceNsintj;在NS命名空间中的全局变量Jvoidmain()i=5;文件作用域的i赋初值Ns:产6;/为全局变量j赋值(子块1usingnamespaceNs;inti;局部变量,块作用域i=7;couti=iendl7
14、coutj=,jendI;)8uti=Kendl;/输出5J在主函数内子块1前,可引用到具有文件作用域的变量,它是可见的。当进入子块1,只能引用到具有局部作用域的同名变量,文件作用域的同名变量不可见,称内层屏蔽,或同名覆盆,即内层的变量覆*了外层的同名变量。5.2对象的生存期P150对象(包括简单变量)从诞生到结束的这段时间就是它的生存期。5. 2.1静态生存期若对象的生存期与程序的运行期相同,称它具有静态生存期。在文件作用域中声明的对象具有静态生存期的。若要在函数内部的块作用城中声明具有静态生存期的对象,则要使用关键字Staticostaticinti;i称为静态变量。其余的对象都具有动态生
15、存期。定义时未指定初值的基本类型静态生存期变量,初值为0;动态生存期变量,不指定初值时值不确定。6. 2.2动态生存期在块作用域中声明的具有动态生存期的对象,称局部生存期对象。动态生存期对象诞生于声明点,结束于该标识符作用域结束处。例5-2变量的生存期与可见性。局部变量就是具有块作用域的变量。全局变量就是具有文件作用域的变量。#includeusingnamespacestd;inti=1;/i为全局变量,具有静态生存期voidother(void)(staticinta=2;staticintb;/a,b为静态局部变量,具有全局寿命,局部可见,只第一次进入函数时被初始化intC=I0;/C为
16、局部变量,具有动态生存期,每次进入函数时都初始化a=a+2;i=i+32;c=c+5;coutOTHERnu;couti:ia:ab:bc:cendl;b=a;voidmain()(staticinta;/a为静态局部变量,具有全局寿命,局部可见intb=-10;/b,c为局部变量,具有动态生存期intc=0;coutMAINn;couti:ia:ab:bc,cendl;c=c+8;other();coutMAINn*;couta:ab:bc:cendI;c=c+10;otherQ;c:*E:aaDebugaa.exe*MAINi:lab:-10c:0-OTHERi:33a:4b:0c:15-
17、MAIN-一i:33a:0b:-10c:8OTHER:65a:6b:4c:15PkeSSanykeytoCOntinUe例5-3具有静态、动态生存期对象的时钟程序。声明具有函数原型作用域、块作用域、类作用域和文件作用域的多个变量及对象,并分析各自的可见性和生存期。#includeusingnamespacestd;cIassClOCk/时钟类定义(pubIic:CIockO;voidsetTime(intnewH,intnewM,intnewS);/三个形参具有函数原型作用域voidshowTime();private:inthour,minute,second;);/时钟类成员函数实现Clo
18、ck:Clock():hour(O),minute(O),second(O)/构造函数voidClock:setTime(intnewH,intnewM,intnewS)/3个形参均具有局部作用域hour=newH;minute=newM;second=newS;voidClock:showTimeOcouthour:minute:,secondendI;CIOCkglObCIOCk;声明对象,具有静态生存期,文件作用域voidmain()cout第一次输出:,endI;/引用文件作用域的对象globClock:globClock.showTime();/对象的成员函数具有类作用域gIobCI
19、ock.setTime(8,30,30);ClockmyClock(gIobClock)j明具有块作用域的对象cout第二次输出:endI;myClock.ShowTime();/引用具有块作用域的对象K-E:aaDebugaa.exe*0:0:0第二次输出:6:30:30jPpessanykeytoCOntinUel5.3类的静态成员P153容态成员是解决同一个美的不同对象之间的数据和函数共享问题的。例,抽象由某公司全体雇员的共性,设计如下的雇员类:cIassEmpIoyee/雇员类private:intempNo;intid;stringname;/字符串对象)若需要统计雇员总数,这个数据
20、存放在什么地方呢?若以类外的变量来存储总数,不能实现数据的障藏。若在类中增加一个数据成员用以存放总数,必然在每一个对象中都存储一个副本,不仅冗余,且每个对象分别维护一个“总数”,势必造成数据的不一致性。比较理想的方案是美的所有对象共同拥有一个用于存放总数的数据成员。5.3.1静态数据成员P154实例属性“一个类的所有对象具有相同的属性”,是指属性的个数、名称、数据类型相同,各个对象的属性值则可各不相同。以类的非静态数据成员表示。类属性是描述类的所有对象的共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。通过静态数据成员来实现“类属性”。静态数据成员的访问静态数据成员不属于任何一个对象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言程序设计 实验 问题 详解 数据 共享 保护

链接地址:https://www.desk33.com/p-780691.html