


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗07繼承與派生4學時第7章 繼承與派生一、實驗目的學習聲明和使用類的繼承關系,聲明派生類。(2) 熟悉不同繼承方式下對基類成員的訪問控制。(3) 學習利用虛基類解決二義性問題。二、實驗任務7_1聲明一個基類Animal。有私有整型成員變量 age,構造其派生類dog,在其成員函數 SetAge(int n)中直接給age 賦值,看看會有什么問題,把age改為公有成員變量,還會有問題嗎?編程試試看。7_2聲明一個基類BaseClass。有整型成員變量 Number,構造其派生類 DerivedClass,觀察構造函數和析構函數的執 行情況。7_3聲明一個車(vehicle)基類。具有MaxS
2、peed、Weight等成員變量,Run Stop等成員函數,由此派生出自行車(bicycle) 類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位 數(SeatNum)等屬性。從 bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中, 注意把vehicle設置為虛基類。如果不把vehicle設置為虛基類,會有什么問題?編程試試看。7_4以實驗6中的People人員類為基類。派生出student學生類,添加屬性:班號char classNo7;派生出teacher教師類,添加屬性:職務 cha
3、r principalship11、部門char department21。從student類中派生出 graduate研究生類,添加屬性:專業char subject21、導師teacher adviser ;從graduate類和teacher類派生出TA助教生類,注意虛基類的使用。重載相應的成員函數,測試這些類。三、實驗步驟1. 編程聲明基類Animal,成員變量age聲明為私有的。構造派生類dog,在其成員函數 SetAge(int n)中直接對age賦值時,會出現類似以下的 錯誤提示:注:在桌面創立一個文本文件,將輸出框的內容復制到文本文件中,再復制到 Word文件中,不會出現漢字的
4、亂碼用private 時的結果:1 已啟動生成:工程:cpp, 配置:Debug Win321生成啟動時間為2022-2-18 11:10:35。1l nitializeBuildStatus:1 正在創立,因為已指定AlwaysCreate 。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 個=把age改為公有變量后重新編譯就可以了。程序名:程序及運行結果:#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 正在創立,因為已指定AlwaysCreate 。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時的結果:C C: fUIDDISsystE32cB(l. ere喟技任蕙褲繼續.2. 編程聲明一個基類 BaseClass,構造其派生類DerivedClass。在構造函數和析構函數中用cout輸出提示信息,觀察構造函數和析構函數的執行情況。程序名:。參考的運行結果:c C;1IHDOISST5tei32cid. ezeBBS|麻 JlS. 了 血百 M一 Q瓚造了 一 丁恥片丄毗門朋盟芙的府象-a粧稿 BeriweClissg的對數-祈構了 一 JBasudlQZ交的對象.睛按任羸犍塑粟
9、 . . _1程序及運行結果:#in clude using namespace std;class BaseClass public :BaseClass() cout 構造了一個 BaseClass 類的對象.endl; BaseClass() cout析構了一個 BaseClass 類的對象.endl; private :int Number;class DeriveClass: public BaseClass public :DeriveClass() cout 構造了一個 DeriveClass 類的對象.endl; DeriveClass() cout 析構了一個 DeriveC
10、lass 類的對象.endl; ; void mai n() DeriveClass a; 口1刈as?3. :操作用調試功能跟蹤程序lab7 2的執行過程。觀察基類和派生類的構造函數和析構函數的執行情況。4. 編程聲明一個車(vehicle)虛基類。由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再從bicycle和motorcar派生出摩托車(motorcycle)類,在 main()函數中測試這個類。程序名:參考的運行結果:程序及運行結果:#in clude using namespace std;class vehicle /車類,作
11、為基類protected :int MaxSpeed,Weight; / 最大速度,重量public:void Run() cout車 vehicle 類開始運行!endl; void Stop() cout 車 vehicle 類停止運行!endl; ;class bicycle: virtual public vehicle / 自行車類:公有繼承虛基類vehicleprotected :int Height; / 高度;class motorcar: virtual public vehicle /汽車類:公有繼承虛基類vehicleprotected :int SeatNum; / 座
12、位數;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 座位數:SeatNumendl;void mai n()cout int 類型占用字節數: sizeof(int)endl;cout vehicle 占用
13、字節數: sizeof (vehicle)endl;cout bicycle 占用字節數: sizeof (bicycle)endl;cout motorcar 占用字節數: sizeof (motorcar)endl;cout motorcycle 占用字節數 : sizeof (motorcycle) 已啟動生成:工程:cpp, 配置:Debug Win321生成啟動時間為 2022-2-18 11:23:32。1l nitializeBuildStatus:1 正在創立,因為已指定AlwaysCreate 。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:找不到標識符1f:projectscppcppmain.cpp(45): erro
16、r C2385:對Stop 的訪問不明確1可能是Stop (位于基vehicle 中)1也可能是Stop (位于基vehicle 中)1f:projectscppcppmain.cpp(45): error C3861:“ Stop :找不到標識符11生成失敗。1=生成:成功0 個,失敗1個,最新 0 個,跳過0 個=(2)指明繼承路徑程序及運行結果將vehicle中數據成員和函數成員指明路徑。#in clude using namespace std;class vehicle /車類,作為基類protected :int MaxSpeed,Weight; / 最大速度,重量public :
17、void Run() cout 車 vehicle 類開始運行!endl; void Stop() cout車 vehicle 類停止運行!endl; ;class bicycle: public vehicle / 自行車類:公有繼承虛基類vehicleprotected :int Height; / 高度;class motorcar: public vehicle /汽車類:公有繼承虛基類vehicleprotected :int SeatNum; / 座位數;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 座位數:SeatNumendl;/ 修改,指明路徑;void mai n()cout int 類型占用字節數: sizeof(int)endl;cout vehicle 占用字節數:
19、sizeof (vehicle)endl;cout bicycle 占用字節數: sizeof (bicycle)endl;cout motorcar 占用字節數: sizeof (motorcar)endl;cout motorcycle 占用字節數 : sizeof (motorcycle)endl;motorcycle mt;mt.bicycle:Ru n();/ 修改,指明路徑mt.Setdatabicycle(100,200,130,2);mt.Showbicycle();mt.motorcar:Stop(); / 修改,指明路徑4iM艾型占用T至曼 rehic In占.用主衛堇一
20、iytle占年三P數:12 utorcar 占用字 pfe: 12 皿片叱X占用子節珈24 -譏比類幵始運口大速度乂 10重里;200 鬧h讓“興停止運刊 按任意撬啞續座位短2c:ios6. 以實驗6中的people人員類為基類,派生相應的類按任務7_4的要求編寫程序,并運行。參考的運行結果:c:1 C TIWD0S sy st en32cdL eze2dA務張山編號;1001 曜儀脅華著口* 15 昌粉迅號* 151 PA1班弓】20L0A.數學師:名王武號:2W1七生巳崩年月FD,19*5 身份證號:196565I10 1飛一蘊教博上生的信息:號 1 1001生別鬥出生百甌 -9M年10月
21、汩身囹證號 19851061班號aOLB並:數學號;2001腰成:lKSE月E日程序及運行結果:Iab6_7.h : People人員類的聲明及成員函數的實現#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;/編號,改為數組char sex3;/男或女,改為數組Date birthday;/ 出生日期char id16;/身份證號,改為數組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 / 學生類private :char classNo7; / 班號public :stude nt()student(student &st):People(st) strcpy(classNo,st.classNo); / 使用類型兼容規那么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; / 職務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 職務:principalshipendl;cout 部門:departmentendl;class graduate: public student / 研究生類private :char subject21; / 專業teacher adviser; / 導師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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫相關課件
- 中醫婦科護理課件
- 大學生職業規劃大賽《書法專業》生涯發展展示
- 自媒體賬號內容合作合同(版)
- 生豬養殖合作協議
- 專科電子信息工程課件
- 項目合同協議書模板
- 二手房屋帶車庫交易合同樣本
- 軟裝一體化裝修合同模板
- 西藏日喀則市南木林一中學2025屆普通中考第二次適應性檢測試題數學試題含解析
- 2025中煤鄂爾多斯能源化工有限公司高校畢業生招聘98人筆試參考題庫附帶答案詳解
- 導游知識培訓課件
- 眼科“一科一品”特色護理服務
- 銀行內控案防警示教育
- 初中勞動測試題及答案
- 基因指導蛋白質的合成課件-高一下學期生物人教版必修22
- 2024-2025學年湖南省長沙市八年級(上)期末物理試卷(含解析)
- 2025-2030中國鍍鋅鋼板行業市場發展趨勢與前景展望戰略研究報告
- 大模型備案-落實算法安全主體責任基本情況
- 2025《四川省建設工程施工總包合同》示范文本
- 施工入場考試題及答案
評論
0/150
提交評論