大一下c++学学习:数据的共享和保护任务实验报告(定义实现CLIENT类)


一、实验目的

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.csdn.net/Yan_Less/article/details/73149578

 (但实际上预编译VS已经给我做好了,所以主要问题不在这里)

2.在test.cpp中删除#include “client.cpp”  只保留 #include “client.h”

 

五、实验心得与小结//套话

此次实验,让我学会了通过创建工程项目来实现一个类,并使我对类中的静态成员数据,静态成员函数的定义、调用、初始化的操作更加熟练。在编写代码的过程中,我也通过查阅网络上的博客解决了error LNK2005的错误,对工程文件中全局变量的声明,头文件重复的问题也有了更多的认识。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章