C++语言程序设计实验问题详解-大数据地共享与保护.docx

上传人:李司机 文档编号:6631146 上传时间:2023-11-25 格式:DOCX 页数:29 大小:196.82KB
返回 下载 相关 举报
C++语言程序设计实验问题详解-大数据地共享与保护.docx_第1页
第1页 / 共29页
C++语言程序设计实验问题详解-大数据地共享与保护.docx_第2页
第2页 / 共29页
C++语言程序设计实验问题详解-大数据地共享与保护.docx_第3页
第3页 / 共29页
C++语言程序设计实验问题详解-大数据地共享与保护.docx_第4页
第4页 / 共29页
C++语言程序设计实验问题详解-大数据地共享与保护.docx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《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实例属性“一个类的所有对象具有相同的属性”,是指属性的个数、名称、数据类型相同,各个对象的属性值则可各不相同。以类的非静态数据成员表示。类属性是描述类的所有对象的共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。通过静态数据成员来实现“类属性”。静态数据成员的访问静态数据成员不属于任何一个对象

21、,只能通过类名对它访问,用法是“类名:标识符”。静态数据成员的说明和定义在类的声明中仅仅对静态数据成员进行引用性说明,必须在文件作用域的某处用类名限定进行定义性说明,这时也可进行初始化。在UML中,静态数据成员下方添加下划线。例5-4具有静态数据成员的POint类。引入蜉态数据成员的Point类。图5-2包含静态数据成员的Point类的UML图Point-X:int-y:int-count:int=O+Point(x:int=O,yy:+getX():int+getY():int+Point(p:Point&)+showCount():voidint=O)#includeusingnamesp

22、acestd;classPointPoint类定义(pubIic:Point(intxx=0,intyy=O):x(x),y(yy)count+;/所有对象共同维护countPoint(Point&p)=p.;y=p.y;count+;Point()count;intgetX()returnx;intgetY()returny;voidshowCount()cout对象COllnt=countendI;/输出静态数据成员private:intx,y;staticintCOUnt;/静态数据成员声明,用于记录点的个数);intPOint:COUnt=O;/静态数据成员定义和初始化,使用类名限定v

23、oidmain()(Pointa(4,5);/定义对象a,其构造函数会使COUnt增1coutPointa:a.getX(),a.getY();a. ShowCount();/输出对象个数Pointb(a);/定义对象b,其拷贝构造函数会使CoUnt增1cout,Pointb:b.getX(),b.getY();b.ShowCount();Point a: 4,5 河象COUnt=IPoint b: 4,5 对泵CoImt-2Press any key to continue在对类的静态私有数据成员初始化的同时,还可引用美的其他私有成员。 例,若一个类T存在类型T的静态私有对象,则可引用该类的

24、私有构造函数 将其初始化。5.3.2静态函数成员P156静态成员函数是使用static关键字声明的函数成员。静态成员函数属于整个类,由同一个类的所有对象共同维护,并共享。对于公有的静态成员函数,可通过类名或对象名来调用。静态成员函数可直接访问该类的黔态数据和函数成员,而访问非静态数据成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。classApubIic:staticvoidf(Aa);private:intx;;voidA:f(Aa)COUtx;/对X的引用是错误的。可用A::f(c)调用,此时,无当前对象。couta.x;/正确在UML中,静态函数成员前添加0例5-5具有静态数

25、据和函数成员的POint类。图5-3包含静态函数成员的Point类的UML图Point- x:int- y:int- COIInt:int二O+Point(xx:int=O,yy:int-O)+getX():int+getY():int+Point(p:Point&)+showCountO:void#incIudeusingnamespacestd;cIassPoint(pubIic:Point(intxx=0,intyy=0):x(xx),y(yy)count+;Point(Point&p)x=p.x;y=p.y;count+;PointOcount;intgetX()returnx;int

26、getYOreturny;staticvoidShowCount()cout对象COUnt=countendI;/静态函数成员private:intx,y;staticintCOllnt;静态数据成员声明);intPOint:COUnt=O;/静态数据成员定义及初始化,使用类名限定VOidmain()(Pointa(4,5);cout,Pointa:a.getX(),a.getY();Point:ShowCount();/输出对象号,类名引用Pointb(a);coutPointb:b.getX(),b.getYO;b. showCourt();/输出对象号,对象名引用)采用静态函数成员的好处

27、可不依赖于任何对象,直接访问静态数据。5.4类的友元P158友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。在一个类中,可用关键字friend将其他函数或类声明为友元。若友元是一般函数或类的成员函数,称友元函数;若友元是一个类,称友元类,友元类的所有成员函数都自动成为友元函数。5.4.1 友元函数P160友元函数是在类中用关键字friend修饰的非成员函数。友元函数不是本类的成员函数,但是在它的函数体中可通过对象名访问类的私有和保护成员。在UML中,友元函数前添加3例5-6使用友元函数计算两点间的距离。图5-4包含友元函数成员的Point类的UML图Poin

28、t-X:int-y:int+Point(xx:int=0,yy:int=0)+getXO:int+getY():intfriend+dist(a:Point&,b:Point&):foat#include#includeusingnamespacestd;cIassPOint/Point类定义pubIic:Point(intxx=0,intyy=O):x(xx),y(yy)intgetX()returnx;intgetY()returny;friendfloatdist(Point&p1,Point&p2);/友元函数声明private:intx,y;);floatdist(Point&p1,

29、Point&p2)/友元函数实现doublex=double(p1.-p2.x);/通过对象访问私有数据成员doubIey=doubIe(p1.y-p2.y);returnstatic_cast(sqrt(x*x+y*y);)voidmain()Pointmyp1(1,1),myp2(4,5);cout”距离是:”;coutdist(myp1,myp2)endI;c:*E:aaDebugaa.exe*距篱是:5P*essanykeytoContinUe5.4.2友元类P161若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。classB(./B类的成

30、员声明friendclassA;/声明A为B的友元类);声明友元类,是建立类与类乏间的联系,实现类之间数据共享的一种途径。在UML中,两个类之间的友元关系是通过构造型依赖来表征。图5-5类A和类B友元关系的UML图Aa;);voidB:set(inti)a. x=i;/由于B是A的友元,所以在B的成员函数中可以访问A类对象的私有成员)voidmainO(Bb;b. set(5);c. displayO;)E:aaDebugaa.exePressanykeytocontinue注意:第一,友元关系是不能传递的。第二,友元关系是单向。第三,友元关系是不被继承的。5.5共享数据的保护P1635. 5

31、.1常对象声明格式:const类型说明符对象名;或类型说明符const对象名;常知象必须逐行而说彳玄能被更新语法如何保障常对象的值不被改变呢?改变对象的数据成员值有两个途径:一是在英外通过对象名访问其公有数据成员,这时语法会限制不能再赋值。二是在美的成员函数中改变数据成员的值,规定不能通过常对象调用普通的成员函数。5.5.2用COnSt修饰的类成员P1641 .常成员函数声明格式:类型说明符函数(参数表)const;注意:COnSt是函数类型的一个组成部分。常成员函数不能更新对象的数据成员,也不能调用该类中没有用ConSt修饰的成员函数。常对象只能调用它的常成员函数。const可用于对重载函数

32、的区分。例如,voidprint;voidprintconst;这是对print的有效重载。在UML中,常成员函数前添加例5-7常成员函数举例。图5-6包含常成员函数的R类的UML图R- r1:int- r2:int+R(rr1:int,rr2:int)+print():void- +print():void#includeusingnamespacestd;classRpubIic:R(intrr1,intrr2):r1(rr1),r2(rr2)voidprint();voidprint()COnSt;常成员函数private:intr1,r2;);voidR:print()coutr1:,

33、r2endI;voidR:printOconstcoutr1;,r2endI;voidmainO(Ra(5,4);a.print();constRb(20,52);b.print();)CaE:aaDebugaa.exe”574-20;52PreSSanykeytocontinue2.常数据成员类的成员数据也可以是常量。使用COnSt说明的数据成员为常数据成员。任何函数中都不能对常数据成员赋值。构造函数对常数据成员进行初始化,就只能通过初始化列表。在UML中,常数据成员前添加consto例5-8常数据成员举例。图5-7包含常数据成员的A类的UML图A-a:constint-b:ConStint

34、=10+A(i:int)+print():void#includeusingnamespacestd;classApubIic:A(inti);voidprint();private:constinta;常数据成员staticconstintb;静态常数据成员);constintA:b=10;/静态常数据成员在美外说明和初始化A::A(inti):a(i)常数据成员只能通过初始化列表来获得初值voidA:printOcouta:bendI;voidmainO/*建立对象a1和a2,并以100和O作为初值,分别调用构造函数,通过构造函数的初始化列表给对象的常数据成员赋初值*/Aa1(100),a

35、2(0);a1.print();a2.print();5.5.3常引用P166常引用的说明形式:工OnSl类型说明符&亓用名;常i用丽T用的对象示能被更新。若用常引用做形参,便不会发生对实参意外的更改。例5-9常引用做形参#include#includeusingnamespacestd;cIassPOint/Point类定义pubIic:Point(intxx=0,intyy=O):x(xx),y(yy)intgetX()returnx;intgetY()returny;friendfloatdist(constPoint&p1,constPoint&p2);/友元函数声明private:i

36、ntx,y;);floatdist(constPoint&p1,constPoint&p2)/友元函数实现doublex=double(p1.-p2.x);/通过对象访问私有数据成员doubIey=doubIe(p1.y-p2.y);returnstatic_cast(sqrt(x*x+y*y);)voidmain0constPointmyp1(1,1),myp2(4,5);CoUt”距离是:”;coutdist(myp1,myp2)endI;)*5.6多文件结构和编译预处理命令P1685.6.1C+程序的一般组织结构通常一个项目至少划分为三个文件:美声明文件(*.h文件)美实现文件(*.cp

37、p文件)类的使用文件(*.cpp,主函数文件)每个源程序文件称为一个编译单元。C+语法要求一个类的声明必须出现在所有使用该类的编译单元中。惯用的做法将类的声明写在头文件中,使用该类的编译单元则包含这个头文件。例5T0具有静态数据、函数成员的Point类,多文件组织。文件1,美的声明,point,h#includeusingnamespacestd;cIassPoint(pubIic:Point(intxx=O,intyy=O)X=xx;Y=yy;countP+;Point(Point&p);Point()countP;intGetXOreturnX;intGetYOreturnY;static

38、voidGetC()COIlt对象id=countPendl;/静态函数成员private:intX,Y;staticintCOUntP;/静态数据成员声明);/文件2,类的实现,point.cpp#includepoint.hwintPOint:COUntP=0;/静态数据成员定义及初始化,使用类名限定Point:Point(Point&p)X=p.X;Y=p.Y;countP+;/文件3,主函数,pmain.cpp#include“point.h”voidmain()(PointA(4,5);cout,PointA,A.GetXO,A.GetYO;A.GetCO;/输出对象号,对象名引用P

39、ointB(八);coutPointB,B.GetXO,B.GetYO;POint:GetC();/输出对象号,类名引用cE:aaDebugaa.exe,PointA,4,5id-1PointB,4,5对象d-2Pressanykeytocontinue图5-8C+多文件组织结构图#include指令的作用将指定的源文件嵌入到当前源文件中#访川迎&指令所在住置,被嵌入的文件可以是.h文件,也可以是.cpp文件。#include两上书写方式#include文件名,按照标准方式搜索要嵌入的文件,该文件位于C+系统目录的include子目录下,一般包含系统提供的标准文件时采用这样的方式。includ

40、e”文件名”,首先在当前目录下搜索要嵌入的文件,若没有,再按照标准方式搜索,对用户自己编写的文件一般采用这种方式。在使用多文件结构时,注意内联函数的特殊性一个内联函数,需要在每个调用它的编译单元中给出一个完全一致的实现。惯用的做法是将内联函数的实现写在头文件中,由调用的编译单元包含这个头文件。5.6.2外部变量与外部函数P170用extern声明外部变量。外部变量是具有文件作用域的变量,定义在所有文件之外。声明一个外部变量时,可以同时定义它,也可以只是引用一个在别处声明的外部变量。源文件1inti=3;定义变量ivoidnext(void);/函数原型声明voidmain()i+;nextO;voidnext(void)i+;otherO;源文件2externinti;/声明一个在其他文件中定义的外部变量ivoidother(void)i+;外部变量是可以为多个源文件所共享的全局变量。定义性声明引用性声明对外部变量的声明可以是定义性声明,即在声明的同时定义(分配内存,初始化),也可以是引用性声明(引用在别处定义的变量)。外部变量可用extern在多处声明,但对变量的定义和初始化是惟一的。定义一个文件作用域的变量时,其联认状态可以为不同的编译单元所共享,只要在其他编译单元中冠以

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号