《實(shí)驗(yàn)05 數(shù)據(jù)的共享與保護(hù)(實(shí)驗(yàn)參考)》由會(huì)員分享,可在線閱讀,更多相關(guān)《實(shí)驗(yàn)05 數(shù)據(jù)的共享與保護(hù)(實(shí)驗(yàn)參考)(9頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、《C++程序設(shè)計(jì)》課內(nèi)實(shí)驗(yàn)
譚毓銀
實(shí)驗(yàn)05 數(shù)據(jù)的共享與保護(hù)(2學(xué)時(shí))
(第5章 數(shù)據(jù)的共享與保護(hù))
一、實(shí)驗(yàn)?zāi)康?
(1) 觀察程序運(yùn)行中變量的作用域、生存期和可見性。
(2) 學(xué)習(xí)類的靜態(tài)成員的使用。
(3) 學(xué)習(xí)多文件結(jié)構(gòu)在C++程序中的使用。
二、實(shí)驗(yàn)任務(wù)
5_1運(yùn)行下面的程序,并通過Debug觀察變量的值。
//5_1.cpp
#include
using namespace std;
int i;
namespace Ns
{
int j;
}
void main()
{
i=5;
2、
Ns::j=6;
{
using namespace Ns;
int i;
i=7;
cout<<"i="<
using namespace std;
int i = 1; // i 為全局變量,具有靜態(tài)生存期。
void other() {
static int a = 2;
static int
3、b;
// a,b為靜態(tài)局部變量,具有全局壽命,局部可見。
//只第一次進(jìn)入函數(shù)時(shí)被初始化。
int c = 10; // C為局部變量,具有動(dòng)態(tài)生存期,
//每次進(jìn)入函數(shù)時(shí)都初始化。
a += 2; i += 32; c += 5;
cout<<"---OTHER---\n";
cout<<" i: "<
4、t b = -10; // b, c為局部變量,具有動(dòng)態(tài)生存期。
int c = 0;
cout << "---MAIN---\n";
cout<<" i: "<
5、值。
//5_3.cpp
#include
using namespace std;
class Clock { //時(shí)鐘類定義
public: //外部接口
Clock();
void setTime(int newH, int newM, int newS); //三個(gè)形參均具有函數(shù)原型作用域
void showTime();
private: //私有數(shù)據(jù)成員
int hour, minute, second;
};
Clock::Clock() : hour(0), minute(0), second(0) { } //構(gòu)造函數(shù)
6、
void Clock::setTime(int newH, int newM, int newS) {
//三個(gè)形參均具有局部作用域
hour = newH;
minute = newM;
second = newS;
}
void Clock::showTime() {
cout << hour << ":" << minute << ":" << second << endl;
}
Clock globClock;//聲明對象globClock,
//具有靜態(tài)生存期,文件作用域
int main() { //主函數(shù)
cou
7、t << "First time output:" << endl;
//引用具有文件作用域的對象:
globClock.showTime();//對象的成員函數(shù)具有類作用域
globClock.setTime(8,30,30);
Clock myClock(globClock);
//聲明具有塊作用域的對象myClock
cout<<"Second time output:"<
8、(程序輸出有錯(cuò),請找出)
//5_4.cpp
#include
using namespace std;
class Point {
public:
Point(int x=0, int y=0) : x(x), y(y) { count++; }
Point(Point &p);
int getX() { return x; }
int getY() { return y; }
void showCount() {
cout << " Object count=“ << count << endl;
}
private:
9、
int x,y;
static int count;
};
Point::Point(Point &p) {
x = p.x;
x = p.y;
count++;
}
int Point::count=0;
int main() {
Point a(4,5);
cout<<"Point A:"<
10、n 0;
}
5_5 運(yùn)行下面的程序,并通過Debug觀察變量的值。
//5_5.cpp
#include
using namespace std;
class Point { //Point類定義
public: //外部接口
Point(int x = 0, int y = 0) : x(x), y(y) { count++; }
Point(Point &p);
~Point() { count--; }
int getX() { return x; }
int getY() { return y; }
static voi
11、d showCount() { //靜態(tài)函數(shù)成員
cout << " Object count = " << count << endl;
}
private: //私有數(shù)據(jù)成員
int x, y;
static int count; //靜態(tài)數(shù)據(jù)成員聲明
};
Point::Point(Point &p) {
x = p.x;
y = p.y;
count++;
}
int Point::count=0;
int main() { //主函數(shù)實(shí)現(xiàn)
Point a(4,5); //聲明對象A
cout<<"Point A,"<
12、X()<<","<
13、Point &p);
~Point() { count--; }
int getX()const { return x; }
int getY()const { return y; }
static void showCount();
private: //私有數(shù)據(jù)成員
int x, y;
static int count; //靜態(tài)數(shù)據(jù)成員聲明
};
//Point.cpp
#include"Point.h"
#include
using namespace std;
int Point::count=0;
Point:
14、:Point(const Point &p):x(p.x),y(p.y){
count++;
}
void Point::showCount() { //靜態(tài)函數(shù)成員
cout << " Object count = " << count << endl;
}
//p5_10.cpp
#include"Point.h"
// include"Point.cpp"
#include
using namespace std;
int main()
{
Point a(4,5); //聲明對象
cout<<"Point A,"<
15、.getX()<<","<
16、,在文件client.cpp中實(shí)現(xiàn),在文件lab5_7.cpp中測試這個(gè)類,觀察相應(yīng)的成員變量取值的變化情況。
三、實(shí)驗(yàn)報(bào)告
(編程)實(shí)現(xiàn)客戶機(jī)(CLIENT)類。
新建一個(gè)空的項(xiàng)目lab5_7,添加頭文件client.h,在其中聲明類CLIENT,注意使用編譯預(yù)處理命令;再添加源程序文件client.cpp,在其中實(shí)現(xiàn)CLIENT類,注意靜態(tài)成員變量的使用方法;再添加文件lab5_7.cpp,在其中定義main()函數(shù),測試CLIENT類,觀察
17、 相應(yīng)的成員變量取值的變化情況。
提示:
訪問一臺(tái)服務(wù)器的客戶總數(shù)。
靜態(tài)成員為類的屬性,為所有的類的對象共同擁有。
再定義兩個(gè)成員函數(shù),分別顯示服務(wù)器名和客戶總數(shù)。
構(gòu)造函數(shù)用于增加一個(gè)客戶,析構(gòu)函數(shù)用于減少一個(gè)客戶。
定義一個(gè)對象,再定義第二個(gè)對象,然后減少一個(gè)對象。
參考程序輸出結(jié)果:
★ 程序及運(yùn)行結(jié)果:
(1) 類聲明頭文件client.h
//Client.h
class Client{
public:
Client();
Client(char cname);
Client(Client &c1);
18、
~Client();
void setClientName(char cname);
char getClientName();
static void ChangeServerName(char sname);
static char ShowServerName();
static void ShowClientCount();
private:
char ClientName;
static char ServName;
static int Count;
};
(2) 類實(shí)現(xiàn)程序文件client.cpp
//Client.cpp
#inc
19、lude "Client.h"
#include
using namespace std;
char Client::ServName='A';
int Client::Count=0;
Client::Client(){
Count++;
//cout<<"構(gòu)造了一個(gè)Client"<
20、:ClientName(c1.ServName){
Count++;
//cout<<"復(fù)制構(gòu)造了一個(gè)Client"<
21、me){
ServName = sname;
}
char Client::ShowServerName(){
return ServName;
}
void Client::ShowClientCount(){
cout<<"客戶總數(shù):"<
using namespace std;
int main(){
cout<<"服務(wù)器名:"<
22、rverName()<