浙江理工大學信息學院 實驗指導書 實驗名稱:
類得繼承機制得實現
學時安排:3 實驗類別: 設計性實驗
實驗要求:1 人1 組
學號:
姓名
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、實驗目得 1、掌握單繼承與多重繼承得概念。
2、理解不同得繼承類型:public、protected與 private,掌握何時使用何種繼承類型。
3、掌握類層次中構造函數得定義方式與建立對象時構造與析構次序 二、實驗原理介紹 通過繼承機制實現對類功能得擴展,合理設計派生類得構造函數、成員函數。
三、實驗設備介紹 軟件需求:
windows 或 linux 下得c++編譯器 硬件需求:
對于硬件方面得要求,建議配置就是 Pentium III 450以上得CPU 處理器,64MB 以上得內存,200MB 得自由硬盤空間、CD-ROM 驅動器、能支持24 位真彩色得顯示卡、彩色顯示器、打印機。
四、實驗內容 實現對第一次實驗結果Elevator 類得功能擴展。在Elevator類已有功能得基礎上派生 AdvancedElevator 類。AdvancedElevator 類可以實現當多人在不同樓層等待乘坐上行或下行得同一部電梯時,能夠合理得根據乘坐人得需求對電梯經停得樓層進行排序。
要求:
1、為了實現上得方便性,我們假設同一組要求乘坐電梯得乘客或者都就是上行,或者都就是下行。
2、在主函數中對該類得功能進行測試,測試方法就是首先選擇在某一時間段一組要乘坐電梯得乘客就是上行還就是下行,然后輸入組中乘客得人數及每一個乘客所在樓層與目得樓層,由 AdvancedElevator 類實例化后得電梯對象在運作得過程中,如果電梯就是上行,則能根據乘客所在得樓層與目得樓層從下向上依次停靠;如果電梯就是下行,則能根據乘客所在得樓層與目得樓層從上向下依次停靠. 3、在測試得過程中,還需要注意測試當多個用戶在同一樓層或多個用戶得目得樓層為同一樓層時情況得處理. 提示:
為了方便描述乘客,我們可以定義一個Person 類,主要描述每一個乘客所在樓層與目得樓層。AdvancedElevator 類從 Elevator 類繼承而來,它從某一個時間段要乘坐電梯得每個乘客得信息當中提取其所在樓層與目得樓層信息,然后對它們進行排序,再由繼承自基類Elevator得成員 setFloorNumber對要停靠得樓層序列依次輸出。
思考 (可選)
如果加入乘客得體重信息,如何實現在停靠樓層對超載信息得提示. 五 程序清單
(el、cpp)
#include "Elevator、h" Elevator::Elevator(int f) {
floor =f;
up=false;
down=false;
currentFloor=1; }; void Elevator::setUpButton()
{
if(currentFloor>floorNumber)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您不能上行!"〈〈endl〈<endl;
}
else if(floorNumber>floor)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout〈〈"沒這一層!太高啦!您想上天?!"<<endl<〈endl;
}
else up=true; } void Elevator::setDownButton()
{
if(currentFloor<floorNumber)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout〈<"您不能下行!”<<endl〈<endl;
}
else if(floorNumber〈1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout〈<"沒這一層!太低啦!您想入地?!”<〈endl<<endl;
}
else down=true; }
void Elevator::setFloorNumber(int floorNumber)
{
if(up)
{
for(;currentFloor<floorNumber;currentFloor++)
{
cout〈〈"—-"〈〈currentFloor<〈”--"<〈endl;
Sleep(2000);}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<〈”第”〈<currentFloor〈<"層到了”〈〈endl<〈endl;
up=false;
}
if(down)
{
for(;currentFloor>floorNumber;currentFloor-—)
{
cout〈〈"--”<<currentFloor〈<"--"<〈endl;
Sleep(2000);}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<<”第”〈〈currentFloor<<”層到了”<〈endl<<endl;
down=false;
} } void Elevator::choice() {
cin>>n;
switch(n)
{
case 1: cout<〈”當前電梯停在"<<currentFloor〈〈"層"<〈endl;
cout<〈"請輸入要進入得樓層”<<endl;cin〉〉floorNumber;setUpButton();setFloorNumber(floorNumber); break;
case 2:
cout<<”當前電梯停在”<<currentFloor<<"層"<<endl;
if(currentFloor==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<〈”您已經在第一層了!除非您自己打洞,不然我就是不會帶您下去得!"<〈endl<〈endl;return;
}
cout〈<”請輸入要進入得樓層”<<endl;cin〉〉floorNumber;setDownButton();setFloorNumber(floorNumber);break;
case 3:exit(0);
default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout〈<"只能選上升與下降!您難道還想玩電梯漂移?!"〈<endl<<endl; break;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<”當前電梯停在”〈〈currentFloor〈<"層”<〈endl;
} void Elevator::charge() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<"-—-請選擇操作—--"〈<endl;
cout〈〈”|
1、上升
|”〈〈endl;
cout<〈"|
2、下降
|"<〈endl;
cout〈<”|
3、退出
|”<<endl;
cout<<"|--------——-—--|"<<endl; } (main、cpp) #include "Elevator、h” class AdvElevator:public Elevator { public:
AdvElevator(int f):Elevator(f){currentFloor=1;}
void setdata();
void setFloorNumber();
void choice(); private:
int judge(int);
int fln[20];
int w[10];
int N;
int num; }; void AdvElevator::setFloorNumber()
{
int i;
if(up)
{cout〈〈endl;
for(i=0;currentFloor<=floorNumber;currentFloor++)
{
if(currentFloor==fln[i])
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout〈〈"第”〈<currentFloor〈<"層到了"<〈endl;
Sleep(2000);i++;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
else {cout<〈"--”<〈currentFloor〈〈"—-”〈<endl;Sleep(2000);}
} currentFloor=floorNumber;cout〈〈endl;up=false;
}
if(down)
{cout〈<endl;
for(i=N—1;currentFloor>=floorNumber;currentFloor—-)
{
if(currentFloor==fln[i])
{
SetConsoleTextAttribute(GetStdHandle(STD_
OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout<<"第"<<currentFloor<〈"層到了"<〈endl;
Sleep(2000);i-—;
SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
else{
cout<<"—-”〈〈currentFloor〈<”——”<〈endl;Sleep(2000);}
}currentFloor=floorNumber;cout<<endl;down=false;
} } void AdvElevator::setdata()
{
cout<<"請告訴我共有幾人"<〈endl;
int weight=0;
cin>〉num;cout<〈endl;
N=2*num;
int i=0,n=1,q=1;
while(q<=num)
{
cout<<”第"<〈q〈〈"位乘客,請依次輸入您所在樓層、您想去得樓層及您得體重(kg)"<〈endl;
cin〉>fln[i]>〉fln[n]〉〉w[i];
if(judge(fln[n])==1){q++;N—=2;fln[i]="\0’;continue;}
weight+=w[i];
if(weight>500)
{cout<<endl;cout<〈"第"<<q<<"位乘客,因超載原因,您不
能上"〈〈endl〈<endl; q++;N—=2;fln[i]=’\0";weight—=w[i];w[i]=0;continue;}
i+=2;n+=2;q++;
}
for (i=0; i〈N—1; i++ )
for (q=i+1; q<N; q++ )
if (fln[i]== fln[q] )
{
?
)
++n ;N〈n ;q=n(rof?
fln[n] = fln[n+1];
;-—N?
q-—;
}
int j,k,temp;
for(j=0;j<N;j++)
for(k=0;k<N-1-j;k++)
{
if(fln[k]〉fln[k+1])
{
temp=fln[k];
fln[k]=fln[k+1];
fln[k+1]=temp;
}
}
if(fln[0]==’\0’) num=100;
if(up)floorNumber=fln[N-1];
if(down)floorNumber=fln[0]; } int AdvElevator::judge(int n)
{
if(up)
{
if(currentFloor>n)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"您不能上行!別搗亂,給我出去!"〈〈endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return 1;
}
else if(n>floor)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout〈〈”沒這一層!太高啦!您想上天?!別搗亂,給我出去!”<〈endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return 1;
}
}
if(down)
{
if(currentFloor<n)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE) , FOR E GROUN D _I N TENSIT Y | FOR E G R OUND_RED|F O R E GROUND_GREEN);
cout<〈"您不能下行!別搗亂,給我出去!"〈<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return 1;
}
else if(n〈1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<〈"沒這一層!太低啦!您想入地?!別搗亂,給我出去!”<〈endl;
Se t C o nsoleTextAttribute ( G e tSt d H a ndl e ( STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return 1;
}
}
return 0; } void AdvElevator::choice() {
cin>>N;
switch(N)
{
case 1: up=true;cout<<”當前電梯停在"〈<currentFloor<〈"層"〈〈endl;
setdata();if(num==100)break;setFloorNumber(); break;
case 2: down=true;cout<<"當前電梯停在"<〈currentFloor<<”層”<<endl;
if(currentFloor==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout〈<"您已經在第一層了!除非您自己打洞,不然我就是不會帶您下去得!”〈<endl<<endl;down=false;return;
}
setdata();if(num==100)break;setFloorNumber();break;
case 3:exit(0);
default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
cout<<"只能選上升與下降!您難道還想玩電梯漂移?!"〈〈endl〈<endl; break;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout〈〈”—-———--—---—---"<<endl; } int main()
{
long a;
time(&a);
int floor;
cout<〈"告訴我總共有幾層"<〈endl;
cin〉〉floor;
AdvElevator el(floor);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout〈<ctime(&a)<<endl;
cout<<"本電梯共"<〈floor〈<”層,且最多上 10 人,歡迎您得使用(限重 500kg)"<<endl<<endl;
while(1)
{
el、charge();
el、AdvElevator::choice();
}
return 0; } 六 運行結果
七 實驗心得 復習了有關數組得內容,比如排序,去除重復元素;費了很大精力來改,但總覺得寫得不好,代碼太長,內容冗雜。有待進步,加強。
推薦訪問: 實驗 繼承 機制上一篇:行政執法案卷評查工作自查報告
下一篇:數據結構查找算法實驗報告
在偉大祖國73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動,集中觀看了抗美援朝題材影片《長津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國剛剛成立一年,
根據省局黨組《關于舉辦習近平談治國理政(第四卷)讀書班的通知》要求,我中心通過專題學習、專題研討以及交流分享等形式,系統的對《習近平談治國理政》(第四卷)進行了深入的學習與交流,下面我就來談一談我個人
《習近平談治國理政》(第四卷)是在百年變局和世紀疫情相互疊加的大背景下,對以習近平同志為核心的黨中央治國理政重大戰略部署、重大理論創造、重大思想引領的系統呈現。它生動記錄了新一代黨中央領導集體統籌兩個
《真抓實干做好新發展階段“三農工作”》是《習近平談治國理政》第四卷中的文章,這是習近平總書記在2020年12月28日中央農村工作會議上的集體學習時的講話。文章指出,我常講,領導干部要胸懷黨和國家工作大
在《習近平談治國理政》第四卷中,習近平總書記強調,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執政黨,在中國共產黨的字典里,“人民”一詞從來都
黨的十八大以來,習近平總書記以馬克思主義戰略家的博大胸襟和深謀遠慮,在治國理政和推動全球治理中牢固樹立戰略意識,在不同場合多次圍繞戰略策略的重要性,戰略和策略的關系,提高戰略思維、堅定戰略自信、強化戰
《習近平談治國理政》第四卷集中展示了以習近平同志為核心的黨中央在百年變局和世紀疫情相互疊加背景下,如何更好地堅持和發展中國特色社會主義而進行的生動實踐與理論探索;對于新時代堅持和發展什么樣的中國特色社
在黨組織的關懷下,我有幸參加了區委組織部組織的入黨積極分子培訓班。為期一周的學習,學習形式多樣,課程內容豐富,各位專家的講解細致精彩,對于我加深對黨的創新理論的認識、對黨的歷史的深入了解、對中共黨員的
《習近平談治國理政》第四卷《共建網上美好精神家園》一文中指出:網絡玩命是新形勢下社會文明的重要內容,是建設網絡強國的重要領域。截至2021年12月,我國網民規模達10 32億,較2020年12月增長4
剛剛召開的中國共產黨第十九屆中央委員會第七次全體會議上討論并通過了黨的十九屆中央委員會向中國共產黨第二十次全國代表大會的報告、黨的十九屆中央紀律檢查委員會向中國共產黨第二十次全國代表大會的工作報告和《