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