大一下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的錯誤,對工程文件中全局變量的聲明,頭文件重複的問題也有了更多的認識。


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