




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、實驗07 繼承與派生(4學時)(第7章 繼承與派生)一、實驗目的(1) 學習聲明和使用類的繼承關(guān)系,聲明派生類。(2) 熟悉不同繼承方式下對基類成員的訪問控制。(3) 學習利用虛基類解決二義性問題。二、實驗任務7_1 聲明一個基類Animal。有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會有什么問題,把age改為公有成員變量,還會有問題嗎?編程試試看。7_2 聲明一個基類BaseClass。有整型成員變量Number,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。7_3 聲明一個車(vehicle)基類。
2、具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中,注意把vehicle設置為虛基類。如果不把vehicle設置為虛基類,會有什么問題?編程試試看。7_4 以實驗6中的People(人員)類為基類。派生出student(學生)類,添加屬性:班號char classNo7;派生出teacher(教師)類,添加
3、屬性:職務char principalship11、部門char department21。從student類中派生出graduate(研究生)類,添加屬性:專業(yè)char subject21、導師teacher adviser;從graduate類和teacher類派生出TA(助教生)類,注意虛基類的使用。重載相應的成員函數(shù),測試這些類。類之間的關(guān)系如圖7-1所示。研究生 專業(yè) 導師 函數(shù) 日期 年 月 日 函數(shù) 助教博士生 教師 職務 部門 函數(shù) 學生 班號 函數(shù) 人員 姓名 編號 性別 出生日期 身份證號 函數(shù) 圖7-1 類圖三、實驗步驟1.(編程)聲明基類Animal,成員變量age聲明
4、為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對age賦值時,會出現(xiàn)類似以下的錯誤提示:(注:在桌面創(chuàng)建一個文本文件,將輸出框的內(nèi)容復制到文本文件中,再復制到Word文件中,不會出現(xiàn)漢字的亂碼)用private時的結(jié)果:1- 已啟動生成: 項目: cpp, 配置: Debug Win32 -1生成啟動時間為 2013-2-18 11:10:35。1InitializeBuildStatus:1 正在創(chuàng)建“Debugcpp.unsuccessfulbuild”,因為已指定“AlwaysCreate”。1ClCompile:1 main.cpp1f:projectscpp
5、cppmain.cpp(13): error C2248: “Animal:age”: 無法訪問 private 成員(在“Animal”類中聲明)1 f:projectscppcppmain.cpp(8) : 參見“Animal:age”的聲明1 f:projectscppcppmain.cpp(5) : 參見“Animal”的聲明1f:projectscppcppmain.cpp(14): error C2248: “Animal:age”: 無法訪問 private 成員(在“Animal”類中聲明)1 f:projectscppcppmain.cpp(8) : 參見“Animal:ag
6、e”的聲明1 f:projectscppcppmain.cpp(5) : 參見“Animal”的聲明11生成失敗。11已用時間 00:00:03.28= 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 =把age改為公有變量后重新編譯就可以了。程序名:lab7_1.cpp。 程序及運行結(jié)果:/lab7_1.cpp#include using namespace std;class Animalprivate: /private時出錯/public:/public和protected正確int age;class dog:public Animalpublic:void SetA
7、ge(int n) age=n; int GetAge() return age; ;void main() dog d; d.SetAge(3); coutAge=d.GetAge()- 已啟動生成: 項目: cpp, 配置: Debug Win32 -1生成啟動時間為 2013-2-18 11:10:35。1InitializeBuildStatus:1 正在創(chuàng)建“Debugcpp.unsuccessfulbuild”,因為已指定“AlwaysCreate”。1ClCompile:1 main.cpp1f:projectscppcppmain.cpp(13): error C2248: “
8、Animal:age”: 無法訪問 private 成員(在“Animal”類中聲明)1 f:projectscppcppmain.cpp(8) : 參見“Animal:age”的聲明1 f:projectscppcppmain.cpp(5) : 參見“Animal”的聲明1f:projectscppcppmain.cpp(14): error C2248: “Animal:age”: 無法訪問 private 成員(在“Animal”類中聲明)1 f:projectscppcppmain.cpp(8) : 參見“Animal:age”的聲明1 f:projectscppcppmain.cpp
9、(5) : 參見“Animal”的聲明11生成失敗。11已用時間 00:00:03.28= 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 =用public時的結(jié)果:2.(編程)聲明一個基類BaseClass,構(gòu)造其派生類DerivedClass。在構(gòu)造函數(shù)和析構(gòu)函數(shù)中用cout輸出提示信息,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。程序名:lab7_2.cpp。參考的運行結(jié)果: 程序及運行結(jié)果:/lab7_2.cpp#include using namespace std;class BaseClasspublic:BaseClass() cout構(gòu)造了一個BaseClass類的對象
10、.endl; BaseClass() cout析構(gòu)了一個BaseClass類的對象.endl; private:int Number;class DeriveClass:public BaseClasspublic:DeriveClass() cout構(gòu)造了一個DeriveClass類的對象.endl; DeriveClass() cout析構(gòu)了一個DeriveClass類的對象.endl; ;void main() DeriveClass a; 3.(操作)用調(diào)試功能跟蹤程序lab7_2的執(zhí)行過程。觀察基類和派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。4.(編程)聲明一個車(vehicle)虛基類
11、。由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再從bicycle和motorcar派生出摩托車(motorcycle)類,在main()函數(shù)中測試這個類。程序名:lab7_3.cpp。參考的運行結(jié)果: 程序及運行結(jié)果:/lab7_3.cpp#include using namespace std;class vehicle/車類,作為基類protected:int MaxSpeed,Weight;/最大速度,重量public:void Run() cout車vehicle類開始運行!endl; void Stop() cout車vehic
12、le類停止運行!endl; ;class bicycle:virtual public vehicle/自行車類:公有繼承虛基類vehicleprotected:int Height;/高度;class motorcar:virtual public vehicle/汽車類:公有繼承虛基類vehicleprotected:int SeatNum;/座位數(shù);class motorcycle:public bicycle,public motorcar/摩托車類:公有繼承自行車類和汽車類public:void Setdata(int ms,int wt,int ht,int sn) MaxSpee
13、d=ms; Weight=wt; Height=ht; SeatNum=sn; ;void Show()cout最大速度:MaxSpeed 重量:Weight 高度:Height 座位數(shù):SeatNumendl;void main()coutint類型占用字節(jié)數(shù): sizeof(int)endl;coutvehicle占用字節(jié)數(shù): sizeof(vehicle)endl;coutbicycle占用字節(jié)數(shù): sizeof(bicycle)endl;coutmotorcar占用字節(jié)數(shù): sizeof(motorcar)endl;coutmotorcycle占用字節(jié)數(shù): sizeof(motorcy
14、cle)- 已啟動生成: 項目: cpp, 配置: Debug Win32 -1生成啟動時間為 2013-2-18 11:23:32。1InitializeBuildStatus:1 正在創(chuàng)建“Debugcpp.unsuccessfulbuild”,因為已指定“AlwaysCreate”。1ClCompile:1 main.cpp1f:projectscppcppmain.cpp(27): error C2385: 對“MaxSpeed”的訪問不明確1 可能是“MaxSpeed”(位于基“vehicle”中)1 也可能是“MaxSpeed”(位于基“vehicle”中)1f:projectsc
15、ppcppmain.cpp(27): error C2385: 對“Weight”的訪問不明確1 可能是“Weight”(位于基“vehicle”中)1 也可能是“Weight”(位于基“vehicle”中)1f:projectscppcppmain.cpp(29): error C2385: 對“MaxSpeed”的訪問不明確1 可能是“MaxSpeed”(位于基“vehicle”中)1 也可能是“MaxSpeed”(位于基“vehicle”中)1f:projectscppcppmain.cpp(30): error C2385: 對“Weight”的訪問不明確1 可能是“Weight”(位
16、于基“vehicle”中)1 也可能是“Weight”(位于基“vehicle”中)1f:projectscppcppmain.cpp(42): error C2385: 對“Run”的訪問不明確1 可能是“Run”(位于基“vehicle”中)1 也可能是“Run”(位于基“vehicle”中)1f:projectscppcppmain.cpp(42): error C3861: “Run”: 找不到標識符1f:projectscppcppmain.cpp(45): error C2385: 對“Stop”的訪問不明確1 可能是“Stop”(位于基“vehicle”中)1 也可能是“Stop
17、”(位于基“vehicle”中)1f:projectscppcppmain.cpp(45): error C3861: “Stop”: 找不到標識符11生成失敗。11已用時間 00:00:01.07= 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 =(2) 指明繼承路徑(程序及運行結(jié)果)將vehicle中數(shù)據(jù)成員和函數(shù)成員指明路徑。/lab7_3.cpp#include using namespace std;class vehicle/車類,作為基類protected:int MaxSpeed,Weight;/最大速度,重量public:void Run() cout車ve
18、hicle類開始運行!endl; void Stop() cout車vehicle類停止運行!endl; ;class bicycle:public vehicle/自行車類:公有繼承虛基類vehicleprotected:int Height;/高度;class motorcar:public vehicle/汽車類:公有繼承虛基類vehicleprotected:int SeatNum;/座位數(shù);class motorcycle:public bicycle,public motorcar/摩托車類:公有繼承自行車類和汽車類public:void Setdatabicycle(int ms
19、,int wt,int ht,int sn)bicycle:MaxSpeed=ms; bicycle:Weight=wt;/修改,指明路徑Height=ht; SeatNum=sn;void Showbicycle()cout最大速度:bicycle:MaxSpeed 重量:bicycle:Weight 高度:Height 座位數(shù):SeatNumendl; /修改,指明路徑;void main()coutint類型占用字節(jié)數(shù): sizeof(int)endl;coutvehicle占用字節(jié)數(shù): sizeof(vehicle)endl;coutbicycle占用字節(jié)數(shù): sizeof(bicyc
20、le)endl;coutmotorcar占用字節(jié)數(shù): sizeof(motorcar)endl;coutmotorcycle占用字節(jié)數(shù): sizeof(motorcycle)endl;motorcycle mt;mt.bicycle:Run();/修改,指明路徑mt.Setdatabicycle(100,200,130,2);mt.Showbicycle();mt.motorcar:Stop();/修改,指明路徑6. 以實驗6中的people(人員)類為基類,派生相應的類。按任務7_4的要求編寫程序,并運行。參考的運行結(jié)果: 程序及運行結(jié)果:(1) lab6_7.h:People(人員)類的聲
21、明及成員函數(shù)的實現(xiàn)/lab6_7.h#include #include using namespace std;class Dateprivate:int yy,mm,dd;public:Date()Date(Date &d) : yy(d.yy),mm(d.mm),dd(d.dd)/增添Date() int Getyy()const return yy; int Getmm()const return mm; int Getdd()const return dd; void Setyy(int y) yy=y; void Setmm(int m) mm=m; void Setdd(int d
22、) dd=d; ;class Peopleprivate:char name11;/姓名,增添char number7;/編號,改為數(shù)組char sex3;/男或女,改為數(shù)組Date birthday;/出生日期char id16;/身份證號,改為數(shù)組public:People()People(People &p);People()void Getname(char na) strcpy(na,name); void Getnumber(char nu) strcpy(nu,number); void Getsex(char se)strcpy(se,sex); int Getbirthyy(
23、)const return birthday.Getyy(); int Getbirthmm()const return birthday.Getmm(); int Getbirthdd()const return birthday.Getdd(); void Getid(char d) strcpy(d,id); void Setname(char na) strcpy(name,na); void Setnumber(char nu) strcpy(number,nu); void Setsex(char se)strcpy(sex,se); void Setbirthyy(int y)
24、birthday.Setyy(y); void Setbirthmm(int m) birthday.Setmm(m); void Setbirthdd(int d) birthday.Setdd(d); void Setid(char d) strcpy(id,d); void input();void output();People:People(People &p):birthday(p.birthday)strcpy(name,);strcpy(number,p.number);strcpy(sex,p.sex);strcpy(id,p.id);inline void Pe
25、ople:input()coutname;coutnumber;coutsex;coutymd;Setbirthyy(y); Setbirthmm(m); Setbirthdd(d);coutid;inline void People:output()cout姓名:namen編號:numberendl;cout性別:sexendl;cout出生日期:Getbirthyy()年Getbirthmm()月Getbirthdd()日endl;cout身份證號:idendl;(2) lab7_4.h:People類的派生類/lab7_4.h#include lab6_7.hclass student:
26、virtual public People/學生類private:char classNo7;/班號public:student()student(student &st):People(st) strcpy(classNo,st.classNo); /使用類型兼容規(guī)則student()void GetclassNo(char cNo) strcpy(cNo,classNo); void SetclassNo(char *c) strcpy(classNo,c); void input() People:input(); coutclassNo; void output() People:ou
27、tput(); cout班號:classNoendl; ;class teacher:virtual public People/教師類private:char principalship11;/職務char department21;/部門public:teacher()teacher(teacher &t):People(t)strcpy(principalship,t.principalship);strcpy(department,t.department);teacher()void Getprincipalship(char *pri) strcpy(pri,principalsh
28、ip); void Getdepartment(char *dep) strcpy(dep,department); void Setprincipalship(char *pri) strcpy(principalship,pri); void Setdepartment(char *dep) strcpy(department,dep); void input()People:input();coutprincipalship;cout department;void output()People:output();cout職務:principalshipendl;cout部門:depar
29、tmentendl;class graduate:public student/研究生類private:char subject21;/專業(yè)teacher adviser;/導師public:graduate()graduate(graduate &g):student(g),adviser(g.adviser) strcpy(subject,g.subject); graduate()void GetSubject(char* sb) strcpy(sb,subject); void Getadviser(teacher &ad)char na11; adviser.Getname(na);
30、 ad.Setname(na);char nb7; adviser.Getnumber(nb); ad.Setnumber(nb);char se3; adviser.Getsex(se); ad.Setsex(se);ad.Setbirthyy(adviser.Getbirthyy();ad.Setbirthmm(adviser.Getbirthmm();ad.Setbirthdd(adviser.Getbirthdd();char id016; adviser.Getid(id0); ad.Setid(id0);char pp11; adviser.Getprincipalship(pp); ad.Setprincipalship(pp);char dp21; adviser.Getdepartment(dp); ad.Setdepartment(dp);void SetSubject(char* sb) strcpy(subject,sb); void Setadviser(teacher
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中標格式合同范本
- 省級課題申報書研究手段
- 買貓質(zhì)保合同范本
- 鳳爪貿(mào)易合同范本
- 烹飪課題申報書
- 2025生產(chǎn)設備大數(shù)據(jù)輕量化采集要求
- 單方面解約合同范本
- 產(chǎn)供銷合同范本
- 小學音樂類課題申報書
- 制作公司合同范本
- 2025年中央一號文件高頻重點考試題庫150題(含答案解析)
- 世界給予我的 課件-2024-2025學年高二下學期開學第一課主題班會
- 《十萬個為什么》整本書閱讀-課件-四年級下冊語文(統(tǒng)編版)
- 法社會學教程(第三版)教學
- (高清版)DZT 0208-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 金屬砂礦類
- HGT4134-2022 工業(yè)聚乙二醇PEG
- 2023版押品考試題庫必考點含答案
- 2023版押品考試題庫必考點含答案
- 安全文明施工管理(EHS)方案(24頁)
- 投標人基本情況一覽表格
- 磷石膏堆場污染防治技術(shù)指南
評論
0/150
提交評論