C++语言程序设计实验答案数据的共享与保护文档格式.docx
- 文档编号:16047653
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:36
- 大小:157.92KB
C++语言程序设计实验答案数据的共享与保护文档格式.docx
《C++语言程序设计实验答案数据的共享与保护文档格式.docx》由会员分享,可在线阅读,更多相关《C++语言程序设计实验答案数据的共享与保护文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
y="
y<
在main()中求x和y的值..."
intx=10,y=20;
进入函数fn1()..."
fn1();
返回main()"
return0;
}
voidfn1(){
inty=200;
5_2实现客户机(CLIENT)类。
声明字符型静态数据成员ServerName,保存其服务器名称;
声明整型静态数据成员ClientNum,记录已定义的客户数量;
定义静态函数ChangeServerName()改变服务器名称。
在头文件client.h中声明类,在文件client.cpp中实现,在文件lab5_2.cpp中测试这个类,观察相应的成员变量取值的变化情况。
三、实验步骤
1.(验证)运行lab5_1.cpp程序,观察程序输出。
全局变量的作用域为文件作用域,在整个程序运行期间有效,但如果在局部模块中声明了同名的变量,则在局部模块中,可见的是局部变量,此时,全局变量不可见;
而局部变量的生存期只限于相应的程序模块中,离开相应的程序模块,局部变量x、y就不再存在,此时同名的全局变量重新可见。
程序名:
lab5_1.cpp。
★程序的运行结果:
2.(编程)实现客户机(CLIENT)类。
新建一个空的项目lab5_2,添加头文件client.h,在其中声明类CLIENT,注意使用编译预处理命令;
再添加源程序文件client.cpp,在其中实现CLIENT类,注意静态成员变量的使用方法;
再添加文件lab5_2.cpp,在其中定义main()函数,测试CLIENT类,观察相应的成员变量取值的变化情况。
提示:
访问一台服务器的客户总数。
静态成员为类的属性,为所有的类的对象共同拥有。
再定义两个静态成员函数,分别显示服务器名和客户总数。
构造函数用于增加一个客户,析构函数用于减少一个客户。
定义一个对象,再定义第二个对象,然后减少一个对象。
参考程序输出结果:
★程序及运行结果:
(1)类声明头文件client.h
//client.h
#ifndefCLIENT_H
#defineCLIENT_H
//其中的静态成员为类的属性,为所有的类的对象共同拥有
classclient{
public:
client();
~client();
staticvoidChangeServerName(charss);
//改变服务器名称
staticvoidshowServerName();
staticvoidshowClientNum();
private:
staticcharServerName;
//保存服务器名,引用性说明
staticintClientNum;
//记录已定义的客户(即对象)数量,引用性说明
};
#endif
(2)类实现程序文件client.cpp
//client.cpp
#include"
client.h"
client:
:
client(){ClientNum++;
}//增加一个对象(客户)
~client(){ClientNum--;
}//减少一个对象(客户)
voidclient:
ChangeServerName(charsn){ServerName=sn;
}//无static
showServerName(){cout<
服务器名:
ServerName<
}
showClientNum(){cout<
客户总数:
ClientNum<
//必须在文件作用域的某处用类名限定进行定义性说明,这时也可以进行初始化。
charclient:
ServerName='
A'
;
//无static
intclient:
ClientNum=0;
(3)主函数文件lab5_2.cpp
//lab5_2.cpp
voidmain(){
client:
showServerName();
//初始状态
showClientNum();
//类名引用静态成员函数
ChangeServerName('
B'
);
clienta;
//增加一个客户
a.showServerName();
//对象名引用静态成员函数
a.showClientNum();
{
clientb;
//增加一个客户
b.showServerName();
b.showClientNum();
}//减少一个客户
(4)运行结果
附:
第5章数据的共享与保护
5.1标识符的作用域与可见性P146
5.1.1作用域
作用域是一个标识符在程序正文中有效的区域。
C++的作用域有:
函数原型作用域、块作用域(局部作用域)、类作用域、文件作用域。
1.函数原型作用域
在函数原型声明时形式参数的作用范围。
例,
doubleArea(doubleradius);
其中标识符radius的作用(或称有效)范围在形参列表的左、右括号之间,称标识符radius的作用域是函数原型作用域。
由于在函数原型的形参表中起作用的只是形参类型,标识符并不起作用,可省略。
2.局部作用域(块作用域)
例:
形参作用域:
从形参列表中的声明处开始,到整个函数体结束处止。
b和c都具有块作用域,是不同的块作用域。
块是一对大括号括起来的一段程序。
此例,函数体是一个块,if语句后的分支体又是一个较小的块,二者是包含关系。
在块中声明的标识符,其作用域从声明处开始,一直到块结束的大括号为止。
具有块作用域的变量也称为局部变量。
3.类作用域
类是一组有名成员的集合,类X的成员m具有类作用域,对m的访问方式如下:
(1)若在X的成员函数中无同名的局部作用域标识符,则在该函数内可访问成员m。
(2)通过表达式x.m或X:
m。
这正是程序中访问对象成员的最基本方法。
(3)通过prt->
m这样的表达式,其中prt为指向X类的一个对象的指针。
4.命名空间作用域
命名空间
大型程序通常由不同模块构成,不同模块中的类和函数之间可能发生重名,将引发错误。
命名空间可以解决类名、函数等的命名冲突。
命名空间语法形式:
namespace命名空间名{
命名空间内的各种声明(函数声明、类声明、……)
例
namespaceSomeNs{
classSomeClass{...};
特殊的命名空间
_全局命名空间:
默认的命名空间
_匿名命名空间:
对每个源文件是唯一的
命名空间作用域
一个命名空间确定了一个命名空间作用域
引用其它命名空间作用域中的标识符
_命名空间名:
标识符名
_例:
声明一个SomeClass型的对象
SomeNs:
SomeClassobj1;
将其它命名空间作用域的标识符暴露于当前作用域
_对指定标识符
using命名空间名:
标识符名;
_对所有标识符
usingnamespace命名空间名;
例5-1中所声明的全局变量就具有文件作用域,它们在整个文件中都有效。
例5-1作用域实例。
//使得在当前文件中可直接引用std命名空间的标识符cout
inti;
//全局变量,文件作用域
namespaceNs{
intj;
//在Ns命名空间中的全局变量
voidmain()
{
i=5;
//文件作用域的i赋初值
Ns:
j=6;
//为全局变量j赋值
{//子块1
usingnamespaceNs;
//使得在当前块中可直接引用Ns命名空间的标识符
inti;
//局部变量,块作用域
i=7;
cout<
i="
i<
//输出7
j="
j<
//输出5
参考(cout,endl是命名空间std中的全局变量):
//usingnamespacestd;
//使得在当前文件中可直接引用std命名空间的标识符cout,endl
std:
cout<
std:
具有文件作用域的变量也称为全局变量。
5.1.2可见性P150
可见的标识符程序运行到某一点,能够引用到的标识符。
文件作用域最大,接下来依次是类作用域和块作用域。
图5-1作用域关系图
可见性表示从内层作用域向外层作用域“看”时能看到什么。
作用域可见性的一般规则:
_标识符声明在前,引用在后。
_同一作用域,不能声明同名标识符。
_在没有包含关系的不同作用域中声明的同名标识符互不影响。
_在具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。
例5-l中,文件作用域与块作用域相互包含。
intj;
//在Ns命名空间中的全
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言程序设计 实验 答案 数据 共享 保护