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

下載本文檔

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

文檔簡介

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

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

3、r principalship11、部門char department21。從student類中派生出 graduate研究生類,添加屬性:專業(yè)char subject21、導(dǎo)師teacher adviser ;從graduate類和teacher類派生出TA助教生類,注意虛基類的使用。重載相應(yīng)的成員函數(shù),測試這些類。三、實(shí)驗(yàn)步驟1. 編程聲明基類Animal,成員變量age聲明為私有的。構(gòu)造派生類dog,在其成員函數(shù) SetAge(int n)中直接對age賦值時,會出現(xiàn)類似以下的 錯誤提示:注:在桌面創(chuàng)立一個文本文件,將輸出框的內(nèi)容復(fù)制到文本文件中,再復(fù)制到 Word文件中,不會出現(xiàn)漢字的

4、亂碼用private 時的結(jié)果:1 已啟動生成:工程:cpp, 配置:Debug Win321生成啟動時間為2022-2-18 11:10:35。1l nitializeBuildStatus:1 正在創(chuàng)立,因?yàn)橐阎付ˋlwaysCreate 。1CICompile:1f:projectscppcppmain.cpp(13):error C2248: Animal:age : 無法訪問 private成員(在Animal 類中聲明)1f:projectscppcppmain.cpp(8):參見Animal:age 的聲明1f:projectscppcppmain.cpp(5):參見Animal

5、 的聲明1f:projectscppcppmain.cpp(14):error C2248: Animal:age :無法訪問 private成員(在Animal 類中聲明)1f:projectscppcppmain.cpp(8):參見Animal:age 的聲明1f:projectscppcppmain.cpp(5):參見Animal 的聲明11生成失敗。1=生成:成功0 個,失敗1個,最新 0 個,跳過0 個=把a(bǔ)ge改為公有變量后重新編譯就可以了。程序名:程序及運(yùn)行結(jié)果:#in clude using namespace std;class An imalprivate : /priva

6、te 時出錯int age;class dog: public Animalpublic :void SetAge( int n) age=n; int GetAge() return age; ;void mai n() dog d; d.SetAge(3); cout Age= d.GetAge() 已啟動生成:工程:cpp, 配置:Debug Win321生成啟動時間為 2022-2-18 11:10:35。1l nitializeBuildStatus:1 正在創(chuàng)立,因?yàn)橐阎付ˋlwaysCreate 。1CICompile:1f:projectscppcppmain.cpp(13):

7、error C2248: Animal:age : 無法訪問 private成員(在Animal 類中聲明)1f:projectscppcppmain.cpp(8):參見Animal:age 的聲明1f:projectscppcppmain.cpp(5):參見Animal 的聲明1f:projectscppcppmain.cpp(14):error C2248: Animal:age :無法訪問 private成員(在Animal 類中聲明)1f:projectscppcppmain.cpp(8):參見Animal:age 的聲明1f:projectscppcppmain.cpp(5):參見A

8、nimal 的聲明11生成失敗。1= 生成:成功0個,失敗 1個,最新 0個,跳過 0個=用public時的結(jié)果:C C: fUIDDISsystE32cB(l. ere喟技任蕙褲繼續(xù).2. 編程聲明一個基類 BaseClass,構(gòu)造其派生類DerivedClass。在構(gòu)造函數(shù)和析構(gòu)函數(shù)中用cout輸出提示信息,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。程序名:。參考的運(yùn)行結(jié)果:c C;1IHDOISST5tei32cid. ezeBBS|麻 JlS. 了 血百 M一 Q瓚造了 一 丁恥片丄毗門朋盟芙的府象-a粧稿 BeriweClissg的對數(shù)-祈構(gòu)了 一 JBasudlQZ交的對象.睛按任羸犍塑粟

9、 . . _1程序及運(yùn)行結(jié)果:#in clude using namespace std;class BaseClass public :BaseClass() cout 構(gòu)造了一個 BaseClass 類的對象.endl; BaseClass() cout析構(gòu)了一個 BaseClass 類的對象.endl; private :int Number;class DeriveClass: public BaseClass public :DeriveClass() cout 構(gòu)造了一個 DeriveClass 類的對象.endl; DeriveClass() cout 析構(gòu)了一個 DeriveC

10、lass 類的對象.endl; ; void mai n() DeriveClass a; 口1刈as?3. :操作用調(diào)試功能跟蹤程序lab7 2的執(zhí)行過程。觀察基類和派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。4. 編程聲明一個車(vehicle)虛基類。由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再從bicycle和motorcar派生出摩托車(motorcycle)類,在 main()函數(shù)中測試這個類。程序名:參考的運(yùn)行結(jié)果:程序及運(yùn)行結(jié)果:#in clude using namespace std;class vehicle /車類,作

11、為基類protected :int MaxSpeed,Weight; / 最大速度,重量public:void Run() cout車 vehicle 類開始運(yùn)行!endl; void Stop() cout 車 vehicle 類停止運(yùn)行!endl; ;class bicycle: virtual public vehicle / 自行車類:公有繼承虛基類vehicleprotected :int Height; / 高度;class motorcar: virtual public vehicle /汽車類:公有繼承虛基類vehicleprotected :int SeatNum; / 座

12、位數(shù);class motorcycle:public bicycle, public motorcar /摩托車類:公有繼承自行車類和汽車類 public:void Setdata( int ms, int wt, int ht, int sn) MaxSpeed=ms; Weight=wt; Height=ht; SeatNum=s n; ;void Show()cout 最大速度:MaxSpeed 重量:Weight 高度:Height 座位數(shù):SeatNumendl;void mai n()cout int 類型占用字節(jié)數(shù): sizeof(int)endl;cout vehicle 占用

13、字節(jié)數(shù): sizeof (vehicle)endl;cout bicycle 占用字節(jié)數(shù): sizeof (bicycle)endl;cout motorcar 占用字節(jié)數(shù): sizeof (motorcar)endl;cout motorcycle 占用字節(jié)數(shù) : sizeof (motorcycle) 已啟動生成:工程:cpp, 配置:Debug Win321生成啟動時間為 2022-2-18 11:23:32。1l nitializeBuildStatus:1 正在創(chuàng)立,因?yàn)橐阎付ˋlwaysCreate 。1CICompile:對MaxSpeed的訪問不明確 中中對Weight 的訪問

14、不明確中中對MaxSpeed的訪問不明確 中中對Weight 的訪問不明確可能是Weight 位于基vehicle 中1f:projectscppcppma in. cpp(27): error C2385:1可能是MaxSpeed (位于基vehicle 1也可能是MaxSpeed(位于基vehicle1f:projectscppcppma in. cpp(27): error C2385:1可能是Weight (位于基vehicle 1也可能是“ Weight(位于基“1f:projectscppcppma in. cpp(29): error C2385: 1可能是MaxSpeed (位

15、于基1也可能是MaxSpeed(位于基1f:projectscppcppma in. cpp(30): error C2385: 1vehiclevehiclevehicle1也可能是Weight (位于基vehicle 中)1f:projectscppcppmain.cpp(42): error C2385:對Rur 的訪問不明確1可能是Rur(位于基vehicle 中)1也可能是Run(位于基vehicle 中)1f:projectscppcppmain.cpp(42): error C3861:“ Run:找不到標(biāo)識符1f:projectscppcppmain.cpp(45): erro

16、r C2385:對Stop 的訪問不明確1可能是Stop (位于基vehicle 中)1也可能是Stop (位于基vehicle 中)1f:projectscppcppmain.cpp(45): error C3861:“ Stop :找不到標(biāo)識符11生成失敗。1=生成:成功0 個,失敗1個,最新 0 個,跳過0 個=(2)指明繼承路徑程序及運(yùn)行結(jié)果將vehicle中數(shù)據(jù)成員和函數(shù)成員指明路徑。#in clude using namespace std;class vehicle /車類,作為基類protected :int MaxSpeed,Weight; / 最大速度,重量public :

17、void Run() cout 車 vehicle 類開始運(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 /摩托車類:公有繼承自行車類和

18、汽車類public :void Setdatabicycle( int ms, int wt, int ht, int sn)bicycle:MaxSpeed=ms; bicycle:Weight=wt; / 修改,指明路徑Height=ht; SeatNum=s n;void Showbicycle()cout 最大速度:bicycle:MaxSpeed 重量:bicycle:Weight 高度:Height 座位數(shù):SeatNumendl;/ 修改,指明路徑;void mai n()cout int 類型占用字節(jié)數(shù): sizeof(int)endl;cout vehicle 占用字節(jié)數(shù):

19、sizeof (vehicle)endl;cout bicycle 占用字節(jié)數(shù): sizeof (bicycle)endl;cout motorcar 占用字節(jié)數(shù): sizeof (motorcar)endl;cout motorcycle 占用字節(jié)數(shù) : sizeof (motorcycle)endl;motorcycle mt;mt.bicycle:Ru n();/ 修改,指明路徑mt.Setdatabicycle(100,200,130,2);mt.Showbicycle();mt.motorcar:Stop(); / 修改,指明路徑4iM艾型占用T至曼 rehic In占.用主衛(wèi)堇一

20、iytle占年三P數(shù):12 utorcar 占用字 pfe: 12 皿片叱X占用子節(jié)珈24 -譏比類幵始運(yùn)口大速度乂 10重里;200 鬧h讓“興停止運(yùn)刊 按任意撬啞續(xù)座位短2c:ios6. 以實(shí)驗(yàn)6中的people人員類為基類,派生相應(yīng)的類按任務(wù)7_4的要求編寫程序,并運(yùn)行。參考的運(yùn)行結(jié)果:c:1 C TIWD0S sy st en32cdL eze2dA務(wù)張山編號;1001 曜儀脅華著口* 15 昌粉迅號* 151 PA1班弓】20L0A.數(shù)學(xué)師:名王武號:2W1七生巳崩年月FD,19*5 身份證號:196565I10 1飛一蘊(yùn)教博上生的信息:號 1 1001生別鬥出生百甌 -9M年10月

21、汩身囹證號 19851061班號aOLB並:數(shù)學(xué)號;2001腰成:lKSE月E日程序及運(yùn)行結(jié)果:Iab6_7.h : People人員類的聲明及成員函數(shù)的實(shí)現(xiàn)#in elude #in elude using namespaee 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()constreturn

22、dd; void Setyy( int y) yy=y; void Setmm( int m) mm=m; void Setdd( int d) 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

23、nu) strcpy(nu,number); void Getsex( char se)strcpy(se,sex); int Getbirthyy() con st retur n birthday.Getyy(); int Getbirthmm() con st return birthday.Getmm(); int Getbirthdd() con st return birthday.Getdd(); void Getid( char d) strcpy(d,id); void Setname( char na) strcpy(name,na); void Setnumber( ch

24、ar nu) strcpy(number,nu); void Setsex( char se)strcpy(sex,se); void Setbirthyy( int y) 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 in put();void output();People:People(People &p):birthday(p.birthday)s

25、trcpy( name,p. name); strcpy(number ,p.number); strcpy(sex,p.sex);strcpy(id,p.id);inline void People:input()cout : ; cinname;cout 編號:;cinnumber;coutsex;cout md;Setbirthyy(y); Setbirthmm(m); Setbirthdd(d);coutid;inline void People:output()cout : namen 編號:numberendl;cout 性別:sexendl;cout 出生日期:Getbirthy

26、y()年Getbirthmm() 月Getbirthdd() 日endl;cout 身份證號:idendl;(2) Iab7_4.h : People 類的派生類#i nclude lab6_7.hclass student: virtual public People / 學(xué)生類private :char classNo7; / 班號public :stude nt()student(student &st):People(st) strcpy(classNo,st.classNo); / 使用類型兼容規(guī)那么stude nt()void GetclassNo( char cNo) strcp

27、y(cNo,classNo); void SetclassNo( char *c) strcpy(classNo,c); void in put() People:i nput(); coutclassNo; void output() People:output(); cout 班號:classNoe ndl; ;class teacher: virtual public People / 教師類private :char prin cipalship11; / 職務(wù)char departme nt21;/ 部門public :teacher()teacher(teacher &t):Peo

28、ple(t)strcpy(pri ncipalship,t.pri ncipalship);strcpy(departme nt,t.departme nt);teacher()void Getprincipalship( char *pri) strcpy(pri,principalship); void Getdepartment( char *dep) strcpy(dep,department); void Setprincipalship( char *pri) strcpy(principalship,pri); void Setdepartment( char *dep) str

29、cpy(department,dep); void in put() People:i nput();coutprincipalship;cout department;void output()People:output();cout 職務(wù):principalshipendl;cout 部門:departmentendl;class graduate: public student / 研究生類private :char subject21; / 專業(yè)teacher adviser; / 導(dǎo)師public :graduate()graduate(graduate &g):stude nt(g

30、),adviser(g.adviser) strcpy(subject,g.subject); graduate()void GetSubject( char* sb) strcpy(sb,subject); void Getadviser(teacher &ad)char na11; adviser .Getname(na); ad.Setname(na);char nb7; adviser .Getnumber(nb); ad.Setnumber(nb);char se3; adviser .Getsex(se); ad.Setsex(se);ad.Setbirthyy(adviser .

31、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 &ad)char n a11; ad.Get name (n a); adviser .Set name( na);char n b7; ad.Get nu mber( nb); adviser.Set nu mber( nb);char se3; ad.Getsex(se); adviser .Setsex(se);adviser .Setbirthyy(ad.Getbirthyy();adviser .Setbirthmm(a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論