西安交大C++程序設(shè)計(jì)第九章作業(yè)_第1頁(yè)
西安交大C++程序設(shè)計(jì)第九章作業(yè)_第2頁(yè)
西安交大C++程序設(shè)計(jì)第九章作業(yè)_第3頁(yè)
西安交大C++程序設(shè)計(jì)第九章作業(yè)_第4頁(yè)
西安交大C++程序設(shè)計(jì)第九章作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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)介

西安交大C++程序設(shè)計(jì)第九章作業(yè)西安交大C++程序設(shè)計(jì)第九章作業(yè)西安交大C++程序設(shè)計(jì)第九章作業(yè)xxx公司西安交大C++程序設(shè)計(jì)第九章作業(yè)文件編號(hào):文件日期:修訂次數(shù):第1.0次更改批準(zhǔn)審核制定方案設(shè)計(jì),管理制度西安交通大學(xué)實(shí)驗(yàn)報(bào)告課程__計(jì)算機(jī)程序設(shè)計(jì)__實(shí)驗(yàn)名稱__繼承__第1頁(yè)共頁(yè)系別__________實(shí)驗(yàn)日期2014年5月日專業(yè)班級(jí)_____組別_____________實(shí)驗(yàn)報(bào)告日期2014年月日姓名_________學(xué)號(hào)__報(bào)告退發(fā)(訂正、重做)同組人_________________________________教師審批簽字一、實(shí)驗(yàn)?zāi)康氖炀毨^承的用法,進(jìn)一步訓(xùn)練類的編程,并練習(xí)不同繼承方式下對(duì)基類的成員的訪問的控制。二、實(shí)驗(yàn)內(nèi)容(一)第一題:從類Person中派生出一個(gè)教師類,新增的屬性有:專業(yè)、職稱和主講課程(一門),并為這些屬性定義相應(yīng)的方法。1.源程序代碼:#include<iostream>usingnamespacestd;classPerson{protected: char*Name; charSex; intAge;public: Person() { Name="csj"; Sex='M'; Age=18; } Person(char*name,charsex,intage) { Register(name,sex,age); } ~Person() { delete[]Name; } voidRegister(char*name,charsex,intage) { intm=strlen(name); Name=newchar[m+1]; strcpy(Name,name); Sex=sex;; Age=age; } voidprint() { cout<<"姓名:"<<Name<<"\t性別:"<<Sex<<"\t年齡:"<<Age<<endl; }};classTeacher:publicPerson{protected: char*zhuanye; char*zhicheng; char*course;public: Teacher(); Teacher(char*,char,int,char*,char*,char*); voidRegister(char*,char,int,char*,char*,char*); ~Teacher(); voidprint(); };Teacher::Teacher(){ Person::Register("羅先覺",'M',61); strcpy(zhuanye,"電氣工程及其自動(dòng)化"); strcpy(zhicheng,"教授"); strcpy(course,"電路");}Teacher::Teacher(char*name,charsex,intage,char*zy,char*zc,char*cor){ Register(name,sex,age,zy,zc,cor);}voidTeacher::Register(char*name,charsex,intage,char*zy,char*zc,char*cor) { Person::Register(name,sex,age); zhuanye=newchar[strlen(zy)+1]; strcpy(zhuanye,zy); zhicheng=newchar[strlen(zc)+1]; strcpy(zhicheng,zc); course=newchar[strlen(cor)+1]; strcpy(course,cor); }Teacher::~Teacher(){ delete[]zhuanye; delete[]zhicheng; delete[]course;}voidTeacher::print(){ cout<<"姓名:"<<Name<<"\t性別:"<<Sex<<"\t年齡:"<<Age<<"\t專業(yè)"<<zhuanye<<"\t職稱:"<<zhicheng<<"\t主講課程:"<<course<<endl;}intmain(){ Personperson; ("csj",'M',18); (); Teacherteacher("lll",'M',56,"math","jiaoshou","gaoshu"); (); ("某某",'M',58,"數(shù)學(xué)","教授","高等數(shù)學(xué)"); (); return0;}2.實(shí)驗(yàn)結(jié)果:(二)第二題:第二題:許多研究生既有學(xué)生的屬性,又有教師的屬性。試通過多重繼承說(shuō)明一個(gè)研究生類。1.源程序代碼:驗(yàn)結(jié)果:(三)第三題:修改例9-5,從Point類中派生出一個(gè)Line類。Line類增加一個(gè)數(shù)據(jù)成員EndPoint計(jì)算線的長(zhǎng)度。試比較一下與直接使用Point類來(lái)構(gòu)造Line類的不同之處。1.源程序代碼:(用了三個(gè)文件)驗(yàn)結(jié)果:四、第四題:從Date類和Time類派生出一個(gè)DateAndTime類,修改相應(yīng)的成員函數(shù),當(dāng)時(shí)間遞增到新的一天時(shí),能夠修改日期值。1.程序源代碼:#include<iostream>#include<cmath>usingnamespacestd;classDate{protected: intyear,month,day;public: Date(inta,intb,intc) { year=a; month=b; day=c; } voidinit(intyy,intmm,intdd); voidprint_ymd();};voidDate::init(intyy,intmm,intdd){ month=(mm>=1&&mm<=12)mm:0; year=(yy>=1900&&yy<=2100)yy:1900; day=(dd>=1&&dd<=31)dd:1;};voidDate::print_ymd(){ cout<<year<<"-"<<month<<"-"<<day;}classTime{ protected: inthour,minute,second;public: Time(inth,intm,ints) { hour=h,minute=m,second=s; } voidRegister(inth=0,intm=0,ints=0) { hour=h,minute=m,second=s; } voidShowme_hms() { cout<<""<<hour<<"小時(shí)"<<minute<<"分鐘"<<second<<"秒"<<endl; }};classDateAndTime:publicDate,publicTime{public: DateAndTime(inta=1900,intb=1,intc=1,intd=0,inte=0,intf=0):Date(a,b,c),Time(d,e,f){} voidinput(intyy,intmm,intdd,inth,intm,ints) { hour=h,minute=m,second=s; month=mm; year=yy; day=dd; } voidNormal() { intn; if(second>=60) { n=second/60;second=second%60;minute=minute+n; } if(second<0) { n=second/60+1;second=second%60+60;minute=minute-n; } if(minute>=60) { n=minute/60;minute=minute%60;hour=hour+n; } if(minute<0) { n=minute/60+1;minute=minute%60+60;hour=hour-n; } if(hour>=24) { n=hour/24;hour=hour%24;day=day+n; } if(hour<0) { n=hour/24+1;hour=hour%24+24;day=day-n; } if(day>=30) { n=day/30;day=day%30;month=month+n; } if(day<0) { n=day/30+1;day=day%30+30;month=month-n; } if(month>=12) { n=month/12;month=month%12;year=year+n; } if(month<0) { n=month/12+1;month=month%12+12;year=year-n; }}voidadd(DateAndTime&d){ year=year+; month=month+; day=day+; hour=hour+; minute=minute+; second=second+;}voidsub(DateAndTime&d){ year=; month=; day=; hour=; minute=; second=;}voidshow(){ Normal(); print_ymd(); Showme_hms();}};voidmain(){ DateAndTimed1,d2; cout<<"初始化:\n"; (); (); (2014,5,23,22,4,50); (0,0,0,6,58,29); cout<<"第一個(gè)時(shí)間:\n"; (); cout<<"第二個(gè)時(shí)間:\n"; (); cout<<"第一個(gè)時(shí)間第二個(gè)時(shí)間相加為:\n"; (d2); ();}2.實(shí)驗(yàn)結(jié)果:五、第五題:采用繼承方式定義一個(gè)三層生日蛋糕類,不論基類還是派生類都至少包含5個(gè)函數(shù):構(gòu)造函數(shù)、設(shè)置數(shù)據(jù)成員函數(shù)、求蛋糕體積、運(yùn)算符>重載函數(shù)、輸出生日祝詞與蛋糕形狀函數(shù)。并編寫主函數(shù)測(cè)試各成員函數(shù)。繼承方式如下:首先定義圓柱體形狀蛋糕類,只有3個(gè)數(shù)據(jù)成員,半徑、高、生日祝詞。然后派生出圓柱體_方柱體蛋糕類,即在圓柱體形狀上增加方柱體形狀。假定方柱體的正方形面積小于圓柱體的圓形面積,注意方柱體的高與正方形的邊長(zhǎng)不一定相等。再用圓柱體_方柱體蛋糕類派生出圓柱體_方柱體_菱形體蛋糕類,即在方柱體形狀上增加菱形柱體形狀。假定菱形柱體的菱形面積小于方柱體的正方形面積。提示:①運(yùn)算符>重載指兩個(gè)蛋糕對(duì)象的體積大小。②基類和派生類數(shù)據(jù)成員不能定義為public。③設(shè)置數(shù)據(jù)成員函數(shù)、求蛋糕體積、求蛋糕表面積函數(shù)、輸出生日祝詞與蛋糕形狀函數(shù)均為同名重載函數(shù),例如分別采用函數(shù)名為init()、volume()、area()、output()。程序運(yùn)行參考圖如下:(紅顏色的功能下一章實(shí)驗(yàn)完成)#include<iostream>#include<cstring>#include<cmath>usingnamespacestd;classyuan{protected: doubler,h1; charll[20];public: yuan(doublea,doubleb,char*str) {r=a; h1=b; strcpy(ll,str);} voidinit(doublea,doubleb,char*str) {r=a; h1=b; strcpy(ll,str);} doublevolume() {return*r*r*h1;} doublearea() {return2**r*(r+h1);} voidoutput() { cout<<"蛋糕祝詞:"<<ll<<endl; cout<<"圓柱形蛋糕信息如下:"<<endl; cout<<"半徑:"<<r<<"高:"<<h1<<"體積:"<<volume()<<"表面積:"<<area()<<endl; }};classfang:publicyuan{protected: doubleaa,h2;public: fang(doublea,doubleb,char*str,doublec,doubled):yuan(a,b,str) { aa=c; h2=d;} voidinit(doublea,doubleb,char*str,doublec,doubled) {yuan::init(a,b,ll); aa=c; h2=d;} doublevolume() {returnaa*aa*h2;} doublearea() {returnaa*aa*2+4*aa*h2;} voidoutput() { yuan::output(); cout<<"方柱形蛋糕信息如下:"<<endl; cout<<"邊長(zhǎng):"<<aa<<"高:"<<h2<<endl; cout<<"體積:"<<volume()<<"表面積:"<<area()<<endl; }};classling:publicfang{protected: doublecz,dz,h3;public: ling(doublea,doubleb,char*str,doublec,doubled,doublee,doublef,doubleg):fang(a,b,str,c,d) { cz=e; dz=f; h3=g;} voidinit(doublea,doubleb,char*str,doublec,doubled,doublee,doublef,doubleg) {fang::init(a,b,str,c,d); cz=e; dz=f; h3=g;} doublevolume() {returncz*dz*h3*;} doublearea() {returncz*dz+4**sqrt(cz*cz+dz*dz)*h3;} voidoutput() { fang::output(); cout<<"菱柱形蛋糕信息如下:"<<endl; cout<<"菱形長(zhǎng)軸:"<<cz<<"短軸:"<<dz<<"高:"<<h3<<endl; cout<<"體積:"<<volume()<<"表面積:"<<area()<<endl; cout<<"總體積為:"<<yuan::volume()+fang::volume()+volume()<<"總表面積:"<<yuan::area()+fang::area()+area()<<endl; }};voidmain(){ charzc[31]; doublea,b,c,d,e,f,g; lingcake(0,0,"",0,0,0,0,0); cout<<"請(qǐng)輸入蛋糕的:祝詞,半徑高,方形邊長(zhǎng)高,菱形長(zhǎng)軸短軸高\(yùn)n"; (zc,30); cin>>a>>b>>c>>d>>e>>f>>g; (a,b,zc,c,d,e,f,g); ();}3.問題分析:六、第六題:(必做題)設(shè)計(jì)定義100位的十進(jìn)制整數(shù)類,成員函數(shù)至少應(yīng)有構(gòu)造函數(shù)、加法函數(shù)、減法函數(shù)、輸出大整數(shù)函數(shù),并編寫主函數(shù)加以測(cè)試。提示:(1)在類中定義三個(gè)數(shù)據(jù)成員,存放正整數(shù)成員intnum[100],存放正負(fù)符號(hào)成員charsign,存放整數(shù)實(shí)際長(zhǎng)度成員intlen;(2)在構(gòu)造函數(shù)中,先將整個(gè)數(shù)組中100個(gè)元素賦0。然后通過大整數(shù)的字符串給數(shù)組num[100]中每個(gè)數(shù)組元素賦值,即要轉(zhuǎn)換賦值。例如大整數(shù)字符串為"-4587",num[99]=‘5’-‘0’+0;num[98]=‘6’-‘0’+0;.......,sign=‘-’;len=16。1.源程序代碼:#include<iostream>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;classczs{ intnum[100]; intlen; charsign;public: czs() { for(inti=0;i<100;i++) num[i]=0; len=0; sign=''; } voidset(char*str) { if(str[0]=='-') { str++; sign='-';} elseif(str[0]=='+') { str++; sign='';} len=strlen(str); for(inti=100-len;i<100;i++) num[i]=str[i+len-100]-'0'; } voidshow() { cout<<sign; for(inti=100-len;i<100;i++) cout<<num[i]; cout<<endl; } voidadd(czs&a) { if(sign== { intb=max(len,; for(inti=99;i>100-b;i--) { num[i]=num[i]+[i]; num[i-1]=num[i-1]+num[i]/10; num[i]=num[i]%10; } num[100-b]=num[100-b]+[100-b]; } else { if(len> for(inti=99;i>=len;i--) { num[i]=num[i][i]; if(num[i]<0) { num[i]=num[i]+10; num[i-1]--; } } elseif(len< { sign=; for(inti=99;i>=len;i--) { num[i]=[i]-num[i]; if(num[i]<0) { num[i]=num[i]+10; [i-1]--; } } } else { intb=0; for(inti=100-len;i<100;i++) if(num[i]!=[i]) { if(num[i]<[i]) b=1; break; } if(b) { sign=; for(inti=99;i>=len;i--) { num[i]=[i]-num[i]; if(num[i]<0) { num[i]=num[i]+10; [i-1]--; } } } else { for(inti=99;i>=len;i--) { num[i]=num[i][i]; if(num[i]<0) { num[i]=num[i]+10; num[i-1]--; }} } } } } voidminus(czsa) { if(sign!= { intb=max(len,; for(inti=99;i>100-b;i--) { num[i]=num[i]+[i]; num[i-1]=num[i-1]+num[i]/10; num[i]=num[i]%10; } num[100-b]=num[100-b]+[100-b]; } else { if(len> for(inti=99;i>=len;i--

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論