C++語言程序設(shè)計(jì)實(shí)驗(yàn)答案_繼承與派生_第1頁
C++語言程序設(shè)計(jì)實(shí)驗(yàn)答案_繼承與派生_第2頁
C++語言程序設(shè)計(jì)實(shí)驗(yàn)答案_繼承與派生_第3頁
C++語言程序設(shè)計(jì)實(shí)驗(yàn)答案_繼承與派生_第4頁
C++語言程序設(shè)計(jì)實(shí)驗(yàn)答案_繼承與派生_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)07 繼承與派生(4學(xué)時(shí))(第7章 繼承與派生)一、實(shí)驗(yàn)?zāi)康?1) 學(xué)習(xí)聲明和使用類的繼承關(guān)系,聲明派生類。(2) 熟悉不同繼承方式下對(duì)基類成員的訪問控制。(3) 學(xué)習(xí)利用虛基類解決二義性問題。二、實(shí)驗(yàn)任務(wù)7_1 聲明一個(gè)基類Animal。有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會(huì)有什么問題,把a(bǔ)ge改為公有成員變量,還會(huì)有問題嗎?編程試試看。7_2 聲明一個(gè)基類BaseClass。有整型成員變量Number,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。7_3 聲明一個(gè)車(vehicle)基類。

2、具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會(huì)有什么問題?編程試試看。7_4 以實(shí)驗(yàn)6中的People(人員)類為基類。派生出student(學(xué)生)類,添加屬性:班號(hào)char classNo7;派生出teacher(教師)類,添加

3、屬性:職務(wù)char principalship11、部門char department21。從student類中派生出graduate(研究生)類,添加屬性:專業(yè)char subject21、導(dǎo)師teacher adviser;從graduate類和teacher類派生出TA(助教生)類,注意虛基類的使用。重載相應(yīng)的成員函數(shù),測試這些類。類之間的關(guān)系如圖7-1所示。研究生 專業(yè) 導(dǎo)師 函數(shù) 日期 年 月 日 函數(shù) 助教博士生 教師 職務(wù) 部門 函數(shù) 學(xué)生 班號(hào) 函數(shù) 人員 姓名 編號(hào) 性別 出生日期 身份證號(hào) 函數(shù) 圖7-1 類圖三、實(shí)驗(yàn)步驟1.(編程)聲明基類Animal,成員變量age聲明

4、為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對(duì)age賦值時(shí),會(huì)出現(xiàn)類似以下的錯(cuò)誤提示:(注:在桌面創(chuàng)建一個(gè)文本文件,將輸出框的內(nèi)容復(fù)制到文本文件中,再復(fù)制到Word文件中,不會(huì)出現(xiàn)漢字的亂碼)用private時(shí)的結(jié)果:1- 已啟動(dòng)生成: 項(xiàng)目: cpp, 配置: Debug Win32 -1生成啟動(dòng)時(shí)間為 2013-2-18 11:10:35。1InitializeBuildStatus:1 正在創(chuàng)建“Debugcpp.unsuccessfulbuild”,因?yàn)橐阎付ā癆lwaysCreate”。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已用時(shí)間 00:00:03.28= 生成: 成功 0 個(gè),失敗 1 個(gè),最新 0 個(gè),跳過 0 個(gè) =把a(bǔ)ge改為公有變量后重新編譯就可以了。程序名:lab7_1.cpp。 程序及運(yùn)行結(jié)果:/lab7_1.cpp#include using namespace std;class Animalprivate: /private時(shí)出錯(cuò)/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()- 已啟動(dòng)生成: 項(xiàng)目: cpp, 配置: Debug Win32 -1生成啟動(dòng)時(shí)間為 2013-2-18 11:10:35。1InitializeBuildStatus:1 正在創(chuàng)建“Debugcpp.unsuccessfulbuild”,因?yàn)橐阎付ā癆lwaysCreate”。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已用時(shí)間 00:00:03.28= 生成: 成功 0 個(gè),失敗 1 個(gè),最新 0 個(gè),跳過 0 個(gè) =用public時(shí)的結(jié)果:2.(編程)聲明一個(gè)基類BaseClass,構(gòu)造其派生類DerivedClass。在構(gòu)造函數(shù)和析構(gòu)函數(shù)中用cout輸出提示信息,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。程序名:lab7_2.cpp。參考的運(yùn)行結(jié)果: 程序及運(yùn)行結(jié)果:/lab7_2.cpp#include using namespace std;class BaseClasspublic:BaseClass() cout構(gòu)造了一個(gè)BaseClass類的對(duì)象

10、.endl; BaseClass() cout析構(gòu)了一個(gè)BaseClass類的對(duì)象.endl; private:int Number;class DeriveClass:public BaseClasspublic:DeriveClass() cout構(gòu)造了一個(gè)DeriveClass類的對(duì)象.endl; DeriveClass() cout析構(gòu)了一個(gè)DeriveClass類的對(duì)象.endl; ;void main() DeriveClass a; 3.(操作)用調(diào)試功能跟蹤程序lab7_2的執(zhí)行過程。觀察基類和派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。4.(編程)聲明一個(gè)車(vehicle)虛基類

11、。由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再從bicycle和motorcar派生出摩托車(motorcycle)類,在main()函數(shù)中測試這個(gè)類。程序名:lab7_3.cpp。參考的運(yùn)行結(jié)果: 程序及運(yùn)行結(jié)果:/lab7_3.cpp#include using namespace std;class vehicle/車類,作為基類protected:int MaxSpeed,Weight;/最大速度,重量public:void Run() cout車vehicle類開始運(yùn)行!endl; void Stop() cout車vehic

12、le類停止運(yùn)行!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)- 已啟動(dòng)生成: 項(xiàng)目: cpp, 配置: Debug Win32 -1生成啟動(dòng)時(shí)間為 2013-2-18 11:23:32。1InitializeBuildStatus:1 正在創(chuàng)建“Debugcpp.unsuccessfulbuild”,因?yàn)橐阎付ā癆lwaysCreate”。1ClCompile:1 main.cpp1f:projectscppcppmain.cpp(27): error C2385: 對(duì)“MaxSpeed”的訪問不明確1 可能是“MaxSpeed”(位于基“vehicle”中)1 也可能是“MaxSpeed”(位于基“vehicle”中)1f:projectsc

15、ppcppmain.cpp(27): error C2385: 對(duì)“Weight”的訪問不明確1 可能是“Weight”(位于基“vehicle”中)1 也可能是“Weight”(位于基“vehicle”中)1f:projectscppcppmain.cpp(29): error C2385: 對(duì)“MaxSpeed”的訪問不明確1 可能是“MaxSpeed”(位于基“vehicle”中)1 也可能是“MaxSpeed”(位于基“vehicle”中)1f:projectscppcppmain.cpp(30): error C2385: 對(duì)“Weight”的訪問不明確1 可能是“Weight”(位

16、于基“vehicle”中)1 也可能是“Weight”(位于基“vehicle”中)1f:projectscppcppmain.cpp(42): error C2385: 對(duì)“Run”的訪問不明確1 可能是“Run”(位于基“vehicle”中)1 也可能是“Run”(位于基“vehicle”中)1f:projectscppcppmain.cpp(42): error C3861: “Run”: 找不到標(biāo)識(shí)符1f:projectscppcppmain.cpp(45): error C2385: 對(duì)“Stop”的訪問不明確1 可能是“Stop”(位于基“vehicle”中)1 也可能是“Stop

17、”(位于基“vehicle”中)1f:projectscppcppmain.cpp(45): error C3861: “Stop”: 找不到標(biāo)識(shí)符11生成失敗。11已用時(shí)間 00:00:01.07= 生成: 成功 0 個(gè),失敗 1 個(gè),最新 0 個(gè),跳過 0 個(gè) =(2) 指明繼承路徑(程序及運(yùn)行結(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類開始運(yùn)行!endl; void Stop() cout車vehicle類停止運(yùn)行!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. 以實(shí)驗(yàn)6中的people(人員)類為基類,派生相應(yīng)的類。按任務(wù)7_4的要求編寫程序,并運(yùn)行。參考的運(yùn)行結(jié)果: 程序及運(yùn)行結(jié)果:(1) lab6_7.h:People(人員)類的聲

21、明及成員函數(shù)的實(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;/編號(hào),改為數(shù)組char sex3;/男或女,改為數(shù)組Date birthday;/出生日期char id16;/身份證號(hào),改為數(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編號(hào):numberendl;cout性別:sexendl;cout出生日期:Getbirthyy()年Getbirthmm()月Getbirthdd()日endl;cout身份證號(hào):idendl;(2) lab7_4.h:People類的派生類/lab7_4.h#include lab6_7.hclass student:

26、virtual public People/學(xué)生類private:char classNo7;/班號(hào)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班號(hào):classNoendl; ;class teacher:virtual public People/教師類private:char principalship11;/職務(wù)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職務(wù):principalshipendl;cout部門:depar

29、tmentendl;class graduate:public student/研究生類private:char subject21;/專業(yè)teacher adviser;/導(dǎo)師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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論