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

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)07繼承與派生(4學(xué)時(shí))(第7章繼承與派生)(1)學(xué)習(xí)聲明和使用類的繼承關(guān)系,聲明派生類。(2)熟悉不同繼承方式下對(duì)基類成員的訪問(wèn)控制。(3)學(xué)習(xí)利用虛基類解決二義性問(wèn)題。7_1聲明一個(gè)基類有私有整型成員變量賦值,看看會(huì)有什么問(wèn)題,把Animal。7_1聲明一個(gè)基類有私有整型成員變量賦值,看看會(huì)有什么問(wèn)題,把Animal。age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(intn)中直接給ageage改為公有成員變量,還會(huì)有問(wèn)題嗎?編程試試看。7_2聲明一個(gè)基類BaseClass有整型成員變量Number,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。7_3聲明一個(gè)車(vehicle)基類。具有MaxSpeed>Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過(guò)程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會(huì)有什么問(wèn)題?編程試試看。7_4以實(shí)驗(yàn)6中的People(人員)類為基類。派生出student(學(xué)生)類,添加屬性:班號(hào)charclassNo[7];派生出teacher(教師)類,添加屬性:職務(wù)charprincipalship[11]、部門(mén)chardepartment[21]。從student類中派生出graduate(研究生)類,添加屬性:專業(yè)charsubject[21]、導(dǎo)師teacheradviser;從graduate類和teacher類派生出TA(助教生)類,注意虛基類的使用。重載相應(yīng)的成員函數(shù),測(cè)試這些類。類之間的關(guān)系如圖7-1所示。日期人員日期TOC\o"1-5"\h\z姓名■',年編號(hào)y月性別日出生日期身份證號(hào)函數(shù)函數(shù)圖7-1類圖三、實(shí)驗(yàn)步驟1.(編程)聲明基類Animal,成員變量age聲明為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(intn)中直接對(duì)age賦值時(shí),會(huì)出現(xiàn)類似以下的錯(cuò)誤提示:(注:在桌面創(chuàng)建一個(gè)文本文件,將輸出框的內(nèi)容復(fù)制到文本文件中,再?gòu)?fù)制到Word文件中,不會(huì)出現(xiàn)漢字的亂碼)用private時(shí)的結(jié)果:1>已啟動(dòng)生成:項(xiàng)目:cpp,配置:DebugWin321>生成啟動(dòng)時(shí)間為2013-2-1811:10:35。1>InitializeBuildStatus:1>正在創(chuàng)建“Debug\cpp.unsuccessfulbuild”,因?yàn)橐阎付ā癆lwaysCreate1>ClCompile:1>main.cpp1>f:\projects\cpp\cpp\main.cpp(13):errorC2248:"Animal::age":無(wú)法訪問(wèn)private成員(在“Animal”類中聲明)1>f:\projects\cpp\cpp\main.cpp(8):參見(jiàn)“Animal::age”的聲明1>f:\projects\cpp\cpp\main.cpp(5):參見(jiàn)“Animal”的聲明private1>f:\projects\cpp\cpp\main.cpp(14):errorC2248:"Animal::age":無(wú)法訪問(wèn)private成員(在“Animal”類中聲明)1>f:\projects\cpp\cpp\main.cpp(8):參見(jiàn)“Animal::age”的聲明1>f:\projects\cpp\cpp\main.cpp(5):參見(jiàn)“Animal”的聲明1>1>生成失敗。1>1>已用時(shí)間00:00:03.28==========生成:成功0個(gè),失敗1個(gè),最新0個(gè),跳過(guò)0個(gè)==========把a(bǔ)ge改為公有變量后重新編譯就可以了。程序名:lab7_1.cpp?!锍绦蚣斑\(yùn)行結(jié)果://lab7_1.cpp#include<iostream>usingnamespacestd;classAnimal{private://private時(shí)出錯(cuò)“public:〃public和protected正確intage;};classdog:publicAnimal{public:voidSetAge(intn){age=n;}intGetAge(){returnage;}};voidmain(){dogd;d.SetAge(3);cout<<"Age="<<d.GetAge()<<endl;}用private時(shí)的結(jié)果:1>已啟動(dòng)生成:項(xiàng)目:cpp,配置:DebugWin321>生成啟動(dòng)時(shí)間為2013-2-1811:10:35。1>InitializeBuildStatus:1>正在創(chuàng)建“Debug\cpp.unsuccessfulbuild1>ClCompile:1>main.cpp1>f:\projects\cpp\cpp\main.cpp(13):error成員(在“Animal”類中聲明)1>f:\projects\cpp\cpp\main.cpp(8):1>f:\projects\cpp\cpp\main.cpp(5):1>f:\projects\cpp\cpp\main.cpp(14):error成員(在“Animal”類中聲明)”,因?yàn)橐阎付ā癆lwaysCreateC2248:"Animal::age":無(wú)法訪問(wèn)參見(jiàn)“Animal::age”的聲明參見(jiàn)“Animal”的聲明C2248:"Animal::age":無(wú)法訪問(wèn)privateprivate參見(jiàn)“參見(jiàn)“Animal::age”的聲明1>f:\projects\cpp\cpp\main.cpp(8):1>f:\projects\cpp\cpp\main.cpp(5):參見(jiàn)“Animal”的聲明1>1>生成失敗。1>1>已用時(shí)間00:00:03.28==========生成:成功0個(gè),失敗1個(gè),最新0個(gè),跳過(guò)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<iostream>usingnamespacestd;classBaseClass{public:BaseClass(){cout<<“構(gòu)造了一個(gè)BaseClass類的對(duì)象."<<endl;}?BaseClass(){cout<<“析構(gòu)了一個(gè)BaseClass類的對(duì)象."<<endl;}private:intNumber;};classDeriveClass:publicBaseClass{public:DeriveClass(){cout<<"構(gòu)造了一個(gè)DeriveClass類的對(duì)象."<<endl;}~DeriveClass(){cout<<“析構(gòu)了一個(gè)DeriveClass類的對(duì)象."<<endl;}};voidmain(){DeriveClassa;}.(操作)用調(diào)試功能跟蹤程序lab7_2的執(zhí)行過(guò)程。觀察基類和派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。.(編程)聲明一個(gè)車(vehicle)虛基類。由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再?gòu)腷icycle和motorcar派生出摩托車(motorcycle)類,在main()函數(shù)中測(cè)試這個(gè)類。程序名:lab7_3.cpp。參考的運(yùn)行結(jié)果:★程序及運(yùn)行結(jié)果://lab7_3.cpp#include<iostream>usingnamespacestd;classvehicle{//車類,作為基類protected:intMaxSpeed,Weight;//最大速度,重量public:voidRun(){cout<<"車vehicle類開(kāi)始運(yùn)行!"<<endl;}voidStop(){cout<<"車vehicle類停止運(yùn)行!"<<endl;}};classbicycle:virtualpublicvehicle{〃自行車類:公有繼承虛基類vehicleprotected:intHeight;//高度};classmotorcar:virtualpublicvehicle{//汽車類:公有繼承虛基類vehicleprotected:intSeatNum;//座位數(shù)};classmotorcycle:publicbicycle,publicmotorcar{//摩托車類:公有繼承自行車類和汽車類public:voidSetdata(intms,intwt,intht,intsn){MaxSpeed=ms;Weight=wt;Height=ht;SeatNum=sn;};voidShow(){cout<<“最大速度:"<<MaxSpeed<<"重量:"<<Weight<<"高度:"<<Height<<"座位數(shù):"<<SeatNum<<endl;}};voidmain(){cout<<"int類型占用字節(jié)數(shù):"<<sizeof(int)<<endl;cout<<"vehicle占用字節(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)<<endl;motorcyclemt;mt.Run();mt.Setdata(100,200,130,2);mt.Show();mt.Stop();}為什么?按推算應(yīng)該是:vehicle占用8字節(jié);bicycle占用12字節(jié);motorcar占用12字節(jié);motorcycle占用16字節(jié)。5.(驗(yàn)證)把vehicle設(shè)置為非虛基類。再編譯一次,此時(shí)系統(tǒng)報(bào)錯(cuò),無(wú)法編譯成功。這是因?yàn)槿舨话裿ehicle設(shè)置為虛基類,會(huì)出現(xiàn)二義性錯(cuò)誤,程序不能成功編譯。訪問(wèn)vehicle的成員時(shí)指明繼承路徑后,可以糾正二義性錯(cuò)誤,試修改程序,然后運(yùn)行★程序的運(yùn)行結(jié)果:(1)沒(méi)有指明繼承路徑(運(yùn)行結(jié)果)將上面的程序的bicycle類和motorcar類改為非虛基類公有繼承出現(xiàn)二義(ambiguous)性錯(cuò)誤:vehicle類后,編譯時(shí)1>已啟動(dòng)生成:項(xiàng)目:cpp,配置:DebugWin321>生成啟動(dòng)時(shí)間為2013-2-1811:23:32。1>InitializeBuildStatus:1>正在倉(cāng)1J建"Debug\cpp.unsuccessfulbuild”,因?yàn)橐阎付ā癆lwaysCreate1>ClCompile:1>main.cpp1>f:\projects\cpp\cpp\main.cpp(27):errorC2385:1>1>可能是“MaxSpeed”(位于基“也可能是“MaxSpeed”(位于基vehicle”vehicle對(duì)“MaxSpeed”的訪問(wèn)不明確中)”中)1>f:\projects\cpp\cpp\main.cpp(27):errorC2385:1>可能是“Weight"(位于基"vehicle對(duì)“Weight”的訪問(wèn)不明確中)1>也可能是“Weight”(位于基“vehicle1>f:\projects\cpp\cpp\main.cpp(29):errorC2385:1>1>可能是“MaxSpeed”(位于基“也可能是“MaxSpeed”(位于基vehiclevehicle中)對(duì)“MaxSpeed”的訪問(wèn)不明確中)1>f:\projects\cpp\cpp\main.cpp(30):errorC2385:1>1>可能是“Weight”(位于基“vehicle也可能是“Weight”(位于基“vehicle1>f:\projects\cpp\cpp\main.cpp(42):errorC2385:對(duì)中)”中)對(duì)Weight”的訪問(wèn)不明確Run”的訪問(wèn)不明確1>1>可能是“Run”(位于基“vehicle也可能是“Run”(位于基“vehicle中)1>f:\projects\cpp\cpp\main.cpp(42):errorC3861:1>f:\projects\cpp\cpp\main.cpp(45):errorC2385:Run”“Stop”找不到標(biāo)識(shí)符的訪問(wèn)不明確1>1>可能是“Stop”(位于基“vehicle也可能是“Stop”(位于基“vehicle1>f:\projects\cpp\cpp\main.cpp(45):errorC3861:“Stop”:找不到標(biāo)識(shí)符1>1>生成失敗。1>1>已用時(shí)間00:00:01.07==========生成:成功0個(gè),失敗1個(gè),最新0個(gè),跳過(guò)0個(gè)(2)指明繼承路徑(程序及運(yùn)行結(jié)果)將vehicle中數(shù)據(jù)成員和函數(shù)成員指明路徑。//lab7_3.cpp#include<iostream>usingnamespacestd;classvehicle{//車類,作為基類protected一:intMaxSpeed,Weight;//最大速度,重量public:voidRun(){cout<<"車vehicle類開(kāi)始運(yùn)行!"<<endl;}voidStop(){cout<<"車vehicle類停止運(yùn)行!"<<endl;}};classbicycle:publicvehicle{//自行車類:公有繼承虛基類vehicleprotected:intHeight;//高度};classmotorcar:publicvehicle{//汽車類:公有繼承虛基類vehicleprotected:intSeatNum;//座位數(shù)};classmotorcycle:publicbicycle,publicmotorcar{//摩托車類:公有繼承自行車類和汽車類public:voidSetdatabicycle(intms,intwt,intht,intsn){bicycle::MaxSpeed=ms;bicycle::Weight=wt;//修改,指明路徑Height=ht;SeatNum=sn;};voidShowbicycle(){cout<<”最大速度:"<<bicycle::MaxSpeed<<"重量:"<<bicycle::Weight<<"高度:"<<Height<<"座位數(shù):"<<SeatNum<<endl;//修改,指明路徑}};voidmain(){cout<<"int類型占用字節(jié)數(shù):"<<sizeof(int)<<endl;cout<<"vehicle占用字節(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)<<endl;motorcyclemt;mt.bicycle::Run();//修改,指明路徑mt.Setdatabicycle(100,200,130,2);mt.Showbicycle();mt.motorcar::Stop();//修改,指明路徑4.以實(shí)驗(yàn)6中的people(人員)類為基類,派生相應(yīng)的類按任務(wù)7_4的要求編寫(xiě)程序,弁運(yùn)行。參考的運(yùn)行結(jié)果:C:\VIVDOVS\systcB32\cBd.bxc、助教博士生的信息:>£―:1001《里/文〉:鼻

出生日姐7年M身份證號(hào),任號(hào):2810專業(yè):蚊畢198S10M1,王武:2001〈男/女〉出生日期(年:19651985[■*3:19886505.教WJ藪孽系博士生的職務(wù):本土生所出別師名號(hào)別蜃SF性出身班亨^編性出身11001■、助教博士生的信息:>£―:1001《里/文〉:鼻

出生日姐7年M身份證號(hào),任號(hào):2810專業(yè):蚊畢198S10M1,王武:2001〈男/女〉出生日期(年:19651985[■*3:19886505.教WJ藪孽系博士生的職務(wù):本土生所出別師名號(hào)別蜃SF性出身班亨^編性出身11001■I日期,1925年1。月1日證號(hào)119S51001)201H+A+s熬子1王武:2001:男日愚'1965年5月S證號(hào)19650505國(guó)務(wù)教授Sn(敦學(xué)系力教售

序近7M生的職請(qǐng)接任意鍵繼續(xù).務(wù)工助教uh一工1★程序及運(yùn)行結(jié)果:lab6_7.h:People(人員)類的聲明及成員函數(shù)的實(shí)現(xiàn)//lab6_7.h#include<iostream>#include<cstring>using-namespace一std;classDate{private:intyy,mm,dd;public:Date(){}Date(Date&d):yy(d.yy),mm(d.mm),dd(d.dd){}//增添~Date(){}intGetyy()const{returnyy;}intGetmm()const{returnmm;}intGetdd()const{returndd;}voidSetyy(inty){yy=y;}voidSetmm(intm){mm=m;}voidSetdd(intd){dd=d;}};classPeople{private:charname[11];//姓名,增添charnumber[7];//編號(hào),改為數(shù)組charsex[3];//男或女,改為數(shù)組Datebirthday;//出生日期charid[16];//身份證號(hào),改為數(shù)組public:People(){}People(People&p);~People(){}voidGetname(charna[]){strcpy(na,name);}voidGetnumber(charnu[]){strcpy(nu,number);}voidGetsex(charse[]){strcpy(se,sex);}intGetbirthyy()const{returnbirthday.Getyy();}intGetbirthmm()const{returnbirthday.Getmm();}intGetbirthdd()const{returnbirthday.Getdd();}voidGetid(chard[]){strcpy(d,id);}voidSetname(charna[]){strcpy(name,na);}voidSetnumber(charnu[]){strcpy(number,nu);}voidSetsex(charse[]){strcpy(sex,se);}voidSetbirthyy(inty){birthday.Setyy(y);}voidSetbirthmm(intm){birthday.Setmm(m);}voidSetbirthdd(intd){birthday.Setdd(d);}10voidinput();voidoutput(););People::People(People&p):birthday(p.birthday)(strcpy(name,);strcpy(number,p.number);strcpy(sex,p.sex);strcpy(id,p.id);)inlinevoidPeople::input()(cout<<"姓名:";cin>>name;cout<<"編號(hào):";cin>>number;cout<<“性別(男/女):";cin>>sex;cout<<"出生日期(年月日):";inty,m,d;cin>>y>>m>>d;Setbirthyy(y);Setbirthmm(m);Setbirthdd(d);cout<<"身份證號(hào):";cin>>id;)inlinevoidPeople::output()(cout<<"姓名:"<<name<<"\n編號(hào):"<<number<<endl;cout<<"性另fj:"<<sex<<endl;cout<<”出生日期:"<<Getbirthyy()<<"年"<<Getbirthmm()<<"月"<<Getbirthdd()<<"日"<<endl;cout<<"身份證號(hào):"<<id<<endl;)lab7_4.h:People類的派生類//lab7_4.h#include"lab6_7.h"classstudent:virtualpublicPeople{//學(xué)生類private:charclassNo[7];//班號(hào)public:student(){}student(student&st):People(st){strcpy(classNo,st.classNo);}//使用類型兼容規(guī)則?student(){}11voidSetclassNo(char*c){strcpy(classNo,c);}voidinput(){People::input();cout<<"班號(hào):";cin>>classNo;}"班號(hào):"<<classNo<<endl;}People{//"班號(hào):"<<classNo<<endl;}People{//教師類{People::output();cout<<);classteacher:virtualpublicprivate:charprincipalship[11];//職務(wù)chardepartment[21];//部門(mén)public:teacher(){}teacher(teacher&t):People(t){strcpy(principalship,t.principalship);strcpy(department,t.department);}?teacher(){}voidGetprincipalship(voidvoidvoidvoidGetdepartment(Setprincipalship(Setdepartment(input(){char*pri){strcpy(pri,principalship);}char*dep){strcpy(dep,department);}char*pri){strcpy(principalship,pri);}char*dep){strcpy(department,dep);}void}};People::input();cout<<”職務(wù):cout<<"部門(mén):output(){People::output();cout<<”職務(wù):cout<<"部門(mén):";cin>>principalship;";cin>>department;"<<principalship<<endl;"<<department<<endl;classgraduate:publicstudent{//研究生類private:charsubject[21];//專業(yè)teacheradviser;//導(dǎo)public:graduate(){}graduate(graduate&g):student(g),adviser(g.adviser){strcpy(subject,g.subject);}?graduate(){}voidGetSubject(char*sb){strcpy(sb,subject);}voidGetadviser(teacher&ad){12.Getbirthyy());.Getbirthmm());.Getbirthdd());charcharid0[16];adviserpp[11];adviser.Getid(id0);ad.Setid(id0);.Getprincipalship(pp);ad.Setprincipalship(pp);chardp[21];adviser.Getdepartment(dp);ad.Setdepartment(dp);}voidvoidSetSubject(char*sb){strcpy(subject,sb);}Setadviser(teacher&ad){charna[11];ad.Getname(na);adviser.Setname(na);charnb[7];ad.Getnumber(nb);advisercharse[3];ad.Getsex(se);adviser.Setnumber(nb);.Setsex(se);adviser.Setbirthyy(ad.Getbirthyy());adviser.Setbirthmm(ad.Getbirthmm());adviser.Setbirthdd(ad.Getbirthdd());charid0[16];ad.Getid(id0);adviser.Setid(id0);charpp[11];ad.Getprincipalship(pp);adviser.Setprincipalship(pp);chardp[21];ad.Getdepartment(dp);adviser.Setdepartment(dp);}voidinput(){student::input();cout<<cout<<“專業(yè):.Getbirthyy());.Getbirthmm());.Getbirthdd());charcharid0[16];adviserpp[11];adviser.Getid(id0);ad.Setid(id0);.Getprincipalship(pp);ad.Setprincipalship(pp);chardp[21];adviser.Getdepartment(dp);ad.Setdepartment(dp);}voidvoidSetSubject(char*sb){strcpy(subject,sb);}Setadviser(teacher&ad){charna[11];ad.Getname(na);adviser.Setname(na);charnb[7];ad.Getnumber(nb);advisercharse[3];ad.Getsex(se);adviser.Setnumber(nb);.Setsex(se);adviser.Setbirthyy(ad.Getbirthyy());adviser.Setbirthmm(ad.Getbirthmm());adviser.Setbirthdd(ad.Getbirthdd());charid0[16];ad.Getid(id0);adviser.Setid(id0);charpp[11];ad.Getprincipalship(pp);adviser.Setprincipa

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論