第三次上機(jī)報告_第1頁
第三次上機(jī)報告_第2頁
第三次上機(jī)報告_第3頁
第三次上機(jī)報告_第4頁
第三次上機(jī)報告_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

學(xué)號:姓名:班級:軟件工程141繼承與派生(4學(xué)時)一、實(shí)驗(yàn)?zāi)康?.學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類。2.熟悉不同繼承方式下對基類成員的訪問控制。3.學(xué)習(xí)利用虛基類解決二義性問題。二、實(shí)驗(yàn)任務(wù)1.定義一個基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(intn)中直接給age賦值,看看會有什么問題,把a(bǔ)ge改為公有成員變量,還會有問題嗎?編程試試看。2.定義一個基類BaseClass,有整型成員變量Number,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。3.分析并調(diào)試以下程序運(yùn)行結(jié)果,并和實(shí)際運(yùn)行結(jié)果相對照。#include<iostream>usingnamespacestd;classBase{ intx;public: Base(inti) { x=i; cout<<"ConstuctorofBase"<<endl; } ~Base(){ cout<<"DestuctorofBase"<<endl; } voidshow() { cout<<"x="<<x<<endl; }};classDerived:publicBase{ Based;public: Derived(inti):Base(i),d(i)};intmain(){ Derivedobj(5); obj.show(); return0;}4.定義一個車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類。在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會有什么問題?編程試試看。5.設(shè)計people(人員)類,考慮到通用性,抽象出所有類型人員都具有的屬性:number(編號)、sex(性別)、birthday(出生日期)、id(身份證號)等等。派生出student(學(xué)生)類,添加屬性:班號charclassNO[7];從people類派生出teacher(教師)類,添加屬性:職務(wù)charprincipalship[11]、部門chardepartmentE21]。從student類中派生出graduate(研究生)類,添加屬性:專業(yè)charsubject[21]、導(dǎo)師teacheradviser;從graduate類和teacher類派生出TA(助教生)類,注意虛基類的使用。重載相應(yīng)的成員函數(shù),測試這些類。三、實(shí)驗(yàn)步驟1.若將age設(shè)置為私有成員,在其派生類中直接給其賦值,會出現(xiàn)錯誤提示:將age設(shè)置為公有成員時,能正常運(yùn)行代碼:#include<iostream>usingnamespacestd;classAnimal{public:intage;};classdog:publicAnimal{public:intsetAge(intn)}運(yùn)行結(jié)果為:2.執(zhí)行情況為:(1)基類BaseClass的構(gòu)造函數(shù);(2)派生類DerivedClass的構(gòu)造函數(shù);(3)派生類DerivedClass的析取函數(shù);(4)基類BaseClass的析取函數(shù);代碼:#include<iostream>usingnamespacestd;classBaseClass{public:BaseClass(){Number=90;cout<<"constructorofBaseClass!"<<endl;}~BaseClass(){cout<<"destructorofBaseClass!"<<endl;}private:intNumber;};classDerivedClass:publicBaseClass{public:DerivedClass(){cout<<"constrctorofDerivedClass!"<<endl;}~DerivedClass(){ cout<<"destructorofDerivedClass!"<<endl;}};intmain(){return0;}執(zhí)行結(jié)果:3.分析:(1)執(zhí)行Base的構(gòu)造函數(shù);(2)執(zhí)行Derived的對象obj的Base類構(gòu)造函數(shù),并將obj(5)中參數(shù)5賦值給X及Derived類構(gòu)造函數(shù);(3)執(zhí)行Derived類的對象obj的Derived的析取函數(shù)、在執(zhí)行Derived類的obj的Base析取函數(shù),最后執(zhí)行與第一步相對應(yīng)的Base的析取函數(shù);執(zhí)行結(jié)果:4.虛基類:使得在繼承間接共同基類時只保留一份成員。若不使用虛基類,在最終的派生類中會保留該間接共同基類數(shù)據(jù)成員的多份同名成員。代碼:#include<iostream>usingnamespacestd;classvehicle{public: vehicle(floatm,floatw) { MaxSpeed=m;Weight=w; } ~vehicle(){} voidrun() { cout<<"runningofvehicle!"<<endl; } voidstop() { cout<<"stoppingofvehicle!"<<endl; }floatMaxSpeed; floatWeight;};classbicycle:virtualpublicvehicle{public: bicycle(floatm,floatw,floath):vehicle(m,w) { Height=h; } ~bicycle(){} { SeatNum=s; } ~motorcar(){} intSeatNum;};classmotorcycle:publicbicycle,publicmotorcar{public: motorcycle(floatm,floatw,floath,ints):vehicle(m,w),bicycle(m,w,h),motorcar(m,w,s){} ~motorcycle(){} voiddisplay() {cout<<"MaxSpeed="<<MaxSpeed<<endl; cout<<"Weight="<<Weight<<endl; cout<<"Height="<<Height<<endl; cout<<"SeatNum="<<SeatNum<<endl; }};voidmain(){ floatm,w,h; ints; cout<<"pleaseinput\nMaxSpeed="; cin>>m; cout<<"Weight="; cin>>w; cout<<"Height="; cin>>h; cout<<"SeatNum="; cin>>s; motorcyclemoc(m,w,h,s); moc.display();}運(yùn)行結(jié)果:5.代碼:#include<iostream>#include<string> }; ~People(){}protected: stringnumber; stringsex; stringbirthday; stringid;};classStudent:virtualpublicPeople{public: Student(stringn,strings,stringb,stringi,stringc):People(n,s,b,i) { classNo=c; } ~Student(){}protected:stringclassNo;};classTeacher:virtualpublicPeople{public: Teacher(stringn,strings,stringb,stringi,stringp,stringd):People(n,s,b,i) { principalship=p; department=d; } ~Teacher(){}protected: stringprincipalship;//職務(wù) stringdepartment;//部門};classGraduate:publicStudent } ~Graduate(){}protected: stringsubject;//專業(yè) stringteacher_adviser;//導(dǎo)師};classTA:publicGraduate,publicTeacher{public: TA(stringn,strings,stringb,stringi,stringc,stringsu,stringt,stringp,stringd):People(n,s,b,i),Graduate(n,s,b,i,c,su,t),Teacher(n,s,b,i,p,d) {} ~TA(){} voiddisplay() { cout<<"編號:"<<number<<endl; cout<<"性別:"<<sex<<endl; cout<<"生日:"<<birthday<<endl; cout<<"身份證號:"<<id<<endl; cout<<"班級:"<<classNo<<endl; cout<<"專業(yè):"<<subject<<endl; cout<<"導(dǎo)師:"<<teacher_adviser<<endl; cout<<"導(dǎo)師職務(wù):"<<principalship<<endl; cout<<"導(dǎo)師部門:"<<department<<endl; }};voidmain(){ stringn,s,b,i,c,su,t,p,d; cout<<"請輸入編號:"<<endl;cin>>n; cout<<"請輸入性別:"<<endl;cin>>s; cout<<"請輸入生日:"<<endl;cin>>b; cout<<"請輸入身份證號:"<<endl;cin>>i; cout<<"請輸入班級:"<<endl;cin>>c; cout<<"請輸入專業(yè):"<<endl;cin>>su; cout<<"請輸入導(dǎo)師:"<<endl;cin>>t; cou

溫馨提示

  • 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

提交評論