一、实验目的
1、观察程序运行中变量的作用域、生存期和可见性
2、学习类的静态成员的使用
3、学习多文件结构在C++程序中的使用
二、实验任务
1、实现客户机(CLIENT)类,声明字符型静态数据成员ServerName,保存期服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中声明类,在文件client.cpp中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。
实验2.实现客户机(CLIENT)类
2.1代码
Client.h:
#pragmaonce
#include"iostream"
#include"string"
usingnamespace std;
classCLIENT
{
public:
CLIENT();
~CLIENT();
CLIENT(intx);
staticvoid ChangeServerName(strings);//改变服务器名称函数
staticvoid ShowServername();//输出服务器名称
staticvoid ShowClientNum();//输出客户机数量
void getsize();//获取对象size的函数
private:
staticstring ServerName;//静态变量定义服务器名称
staticint ClientNum;//静态变量记录已定义客户机数量
int size;//表示服务器内存大小
};
Client.cpp:
#include"client.h"
CLIENT::CLIENT(intx)
{
size= x;
ClientNum++;
}
CLIENT::CLIENT()
{
size= 0;
ClientNum++;
}
CLIENT::~CLIENT()
{
}
voidCLIENT::ChangeServerName(strings)
{
ServerName=s;
}
voidCLIENT::ShowServername()
{
cout<<"ServerName="<<ServerName << endl;
}
voidCLIENT::ShowClientNum()
{
cout<<"ClientNum="<< ClientNum << endl;
}
voidCLIENT::getsize()
{
cout<< size << endl;
}
stringCLIENT::ServerName = "a"; //设置默认服务器名称为a
intCLIENT::ClientNum= 0;//初始化客户机数量为
tesp.cpp
#include"client.h"
#include"iostream"
#include"string"
#include"stdlib.h"
usingnamespace std;
int main()
{
string s;
CLIENT::ShowClientNum();//输出初始客户机数
CLIENT::ShowServername();//输出初始服务器名字
cout<<"please inputyour servername"<< endl;
cin >> s;//输入服务器名
CLIENT myserver1(32),myserver2(64);//定义两个服务器
CLIENT::ShowClientNum();//输出当前客户机数
CLIENT::ShowServername();//输出当前服务器名字
myserver1.getsize();//输出sever1的size
myserver2.getsize();//输出sever2的size
system("pause");
return 0;
}
2.2解析(算法设计,程序逻辑,流程图)
1. 在头文件client.h中声明客户机(CLIENT)类,完成静态/非静态数据成员/函数的定义等。
2.在源文件client.cpp中完成类中函数的实现,并给静态数据成员ServerName,ClientNum赋初值。
3.在源文件test.cpp中测试CLIENT这个类的函数,调用类中已定义的函数,观察相应的成员变量取值的变化情况。
2.3运行结果及分析(测试用例,结果,截图,分析)
分析:
第一、 二行:输出静态数据成员ClientNum和ServerName的初始0和a
第二、 四行:提示输入信息。输入新的服务器名字(ServerName)
第五行:调用静态成员函数ShowClientNum()输出当前客户机数。因为在代码中定义了两个CLIENT对象,所以count+2,输出的结果为2
第六行:调用静态成员函数ShowClientNum()输出改变后当前服务器名字。同上因为在代码中调用了函数ChangeServerName()。所以输出结果为ss
第七、八行:输出myserver1和myser2的成员数据size
2.4故障和失败原因
结果截图(只保留有效内容),并加以说明故障的原因以及解决方法
故障error LNK2005
原因:在test.cpp中多引用了一个#include “client.cpp”
解决方法:
1. 在头文件client.h 中最上方添加预编译#pragma once 参考博客:https://blog.youkuaiyun.com/Yan_Less/article/details/73149578
(但实际上预编译VS已经给我做好了,所以主要问题不在这里)
2.在test.cpp中删除#include “client.cpp” 只保留 #include “client.h”
五、实验心得与小结//套话
此次实验,让我学会了通过创建工程项目来实现一个类,并使我对类中的静态成员数据,静态成员函数的定义、调用、初始化的操作更加熟练。在编写代码的过程中,我也通过查阅网络上的博客解决了error LNK2005的错误,对工程文件中全局变量的声明,头文件重复的问题也有了更多的认识。