




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
繼承與組合一、實驗目的.了解繼承在面向對象程序設計中的重要作用。.進一步理解繼承與派生的概念。.掌握通過繼承派生出一個新的類的方法。.了解虛基類的作用和用法。.掌握類的組合二、實驗內容1.請先閱讀下面的程序,寫出程序運行的結果,然后再上機運行程序,驗證自己分析的結果是否正確。⑴#include<iostream>usingnamespacestd;classA{public:A(){cout<<"A::A()called.\n";}virtual-A(){cout<<"A::-A()called.\n";}};classB:publicA{public:B(inti){ cout<<"B::B()called.\n";buf=newchar[i];)virtual~B(){delete[]buf;cout<<"B::-B()called.\n";)private:char*buf;);voidfun(A*a){cout<<"Mayyousucceed!"<<endl;deletea;)intmain(){A*a=newB(15);fun(a);return0;)1、(1)程序運行結果:A::A()called.B::B()called.Mayyousucceed!B::~B()called.A::~A()called.h: called.D::B()called.yousucceed?D:ECcalled.A::RCcalled.frocessexitedwithr-etu.rnvalue0ressdnykeytogontinu.e...#include<iostream>usingnamespacestd;classA{public:A(inta,intb):x(a),y(b){cout<<"Aconstructor…”<<endl}voidAdd(inta,intb){x+=a;y+=b;}voiddisplay(){cout<<"("<<x<<","<<y<<")";}-A(){cout<<"destructorA..."<<endl;}private:intx,y;);classB:privateA{private:inti,j;AAobj;public:cout<<"BB(inta,intb,intc,intd):A(a,b),i(c),j(d),Aobj(1,1){constructor…”<<endl;}cout<<"BvoidAdd(intx1,inty1,intx2,inty2){A::Add(x1,y1);+=x2;j+=y2;}voiddisplay(){A::display();Aobj.display();cout<<"("<<i<<","<<j<<")"<<endl;}~B(){cout<<"destructorB..."<<endl;}};intmain()Bb(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();return0;)(2)程序運行結果:Aconstructor...Aconstructor...Bconstructor...(1,2)(1,1)(3,4)(2,5)(1,1)(8,11)destructorB...destructorA...destructorA...[BD:\c++\6.2.exeAconstructor...。constPLictor...RconstI'mctor=a=<1,2X1C2,5><ia)<8,ll>destPLictordesti'LictaFlestructurProcea君exitedwithreturnvalue3PressanykeytocontImoe...#include<iostream>usingnamespacestd;classA{public:A(inta):x(a){cout<<"Aconstructor…"<<x<<endl;}intf(){return++x;}-A(){cout<<"destructorA..."<<endl;}private:intx;};classB:publicvirtualA{private:inty;AAobj;public:B(inta,intb,intc):A(a),y(c),Aobj(c){cout<<"Bconstructor..."<<y<<endl;}intf(){A::f();Aobj.f();return++y;}voiddisplay(){cout<<A::f()<<"\t"<<Aobj.f()<<"\t"<<f()<<endl;}~B(){cout<<"destructorB..."<<endl;}};classC:publicB{public:C(inta,intb,intc):B(a,b,c),A(0){cout<<"Cconstructor..."<<endl;}};classD:publicC,publicvirtualA{public:D(inta,intb,intc):C(a,b,c),A(c){cout<<"Dconstructor..."<<endl;}~D(){cout<<"destructorD..."<<endl;}};intmain()Dd(7,8,9);d.f();d.display();return0;)⑶程序運行結果:Aconstructor...9Aconstructor...9Bconstructor...9Cconstructor...Dconstructor...12 12 11destructorD...destructorB...destructorA...destructorA...(4)#include<iostream>usingnamespacestd;classBase1(public:Base1()(cout<<"classBase1!"<<endl;));classBase2(public:Base2()(cout<<"classBase2!"<<endl;));classLevel1:publicBase2,virtualpublicBasel(public:Level1()(cout<<"classLevel1!"<<endl;));classLevel2:publicBase2,virtualpublicBase1(public:Level2()(cout<<"classLevel2!"<<endl;);classTopLevel:publicLevel1,virtualpublicLevel2(public:TopLevel()(cout<<"classTopLevel!"<<endl;));intmain()(TopLevelobj;return0;)(4)程序運行結果:classBasel!classBase12classLeve12!classBase2!classLeve11!classTopLevel!
D:\c++\6,4.execlassclassk^lassC1-AGSklagsclassBaselJD:\c++\6,4.execlassclassk^lassC1-AGSklagsclassBase2fLevel2fBase29Lenell*TopLevelTPro(;iESSsxitiedwithrietumvalue0Fressanykeytocontinue檄較抖音半二2.某出版系統(tǒng)發(fā)行圖書和磁帶,利用繼承設計管理出版物的類。要求如下:建立一個基類Publication存儲出版物的標題title、出版物名稱name、單價price及出版日期date。用Book類和Tape類分別管理圖書和磁帶,它們都從Publication類派生。Book類具有保存圖書頁數(shù)的數(shù)據(jù)成員page,Tape類具有保存播放時間的數(shù)據(jù)成員playtime。每個類都有構造函數(shù)、析構函數(shù),且都有用于從鍵盤獲取數(shù)據(jù)的成員函數(shù)inputData(),用于顯示數(shù)據(jù)的成員函數(shù)display()。#include<iostream>usingnamespacestd;#include<string>classDate{public:Date(){}Date(inty,intm,intd);Date(Date&d);voidSetDate(inty,intm,intd);voidShowDate();private:intyear,month,day;);Date::Date(inty,intm,intd){year=y;month=m;day=d;}Date::Date(Date&d){ year=d.year;month=d.month; day=d.day;}voidDate::SetDate(inty,intm,intd){year=y;month=m;day=d;}voidDate::ShowDate(){ cout<<year<<"年"<<month<<"月"<<day<<"曰"<<endl;}classTime{public:Time(){}Time(inth,intm,ints);Time(Time&t);voidSetTime(inth,intm,ints);voidShowTime();private:inthour,minute,second;);Time::Time(inth,intm,ints){hour=h;minute=m;second=s;}Time::Time(Time&t){hour=t.hour;minute=t.minute;second=t.second;}voidTime::SetTime(inth,intm,ints){hour=h;minute=m;second=s;}voidTime::ShowTime(){cout<<hour<<":"<<minute<<":"<<second<<endl;}classPublication{public:Publication(){}Publication(stringtitle,stringname,floatprice,inty,intm,intd);voidinputData();voiddisplay();private:stringtitle;stringname;floatprice;Datedate;};Publication::Publication(stringtitle,stringname,floatprice,inty,intm,intd):title(title),name(name),price(price),date(y,m,d){}voidPublication::inputData(){cout<<"Pleaseinputtitle,name,price,publicationdateofabook:"<<endl;cin>>title>>name>>price;intyear,month,day;cin>>year>>month>>day;date.SetDate(year,month,day);)voidPublication::display(){cout<<"title="<<title<<endl;cout<<"name="<<name<<endl;cout<<"price="<<price<<endl;cout<<"date=";date.ShowDate();)classBook:publicPublication{public:Book(){}Book(stringtitle,stringname,floatprice,inty,intm,intd,intpage);voidinputData();voiddisplay();private:intpage;};Book::Book(stringtitle,stringname,floatprice,inty,intm,intd,intpage):Publication(title,name,price,y,m,d){this->page=page;}voidBook::inputData(){Publication::inputData();cout<<"Pleasethepagesofthebook:"<<endl;cin>>page;}voidBook::display(){Publication::display();cout<<"page="<<page<<endl;}classTape:publicPublication{public:Tape(){}Tape(stringtitle,stringname,floatprice,inty,intm,intd,Timeplaytime);voidinputData();voiddisplay();private:Timeplaytime;};Tape::Tape(stringtitle,stringname,floatprice,inty,intm,intd,Timeplaytime):Publication(title,name,price,y,m,d),playtime(playtime){}voidTape::inputData(){Publication::inputData();cout<<"Pleasetheplaytimeofthetape:"<<endl;inthour,minute,second;cin>>hour>>minute>>second;playtime.SetTime(hour,minute,second);)voidTape::display(){Publication::display();cout<<"playtime=";playtime.ShowTime();)intmain(){ Bookbook1("教材","C++程序設計",30.00,2009,6,1,300);book1.display();cout<<endl;Timetime1(30,10,20);Tapetape1(M^^","C++程序設計視頻",10.00,2009,8,1,time1);tape1.display();Bookbook2;book2.inputData();book2.display();cout<<endl;Tapetape2;tape2.inputData();tape2.display();return0;)3.分別定義教師類Teacher和干部類Cadre,采用多重繼承的方式由這兩個類派生出新類Teacher_Cadre(教師兼干部類)要求:(1)在兩個基類中都包含姓名、年齡、性別、地址、電話數(shù)據(jù)成員。(2)在Teacher類中還包含數(shù)據(jù)成員職稱title,在Cadre類中還包含數(shù)據(jù)成員職務post,在Teacher_Cadre類中還包含數(shù)據(jù)成員工資wage。(3)對兩個基類中的姓名、年齡、性別、地址、電話數(shù)據(jù)成員用相同的名字,在訪問這類數(shù)據(jù)成員時,指定作用域。(4)在類體中聲明成員函數(shù),在類外定義成員函數(shù)。(5)在派生類Teacher_Cadre的成員函數(shù)$m亞中調用Teacher類中的display函數(shù),輸出姓名、年齡、性別、地址、電話,然后再用cout語句輸出職務和工資。#include<string>#include<iostream>usingnamespacestd;classTeacher{public:Teacher(stringnam,inta,chars,stringtit,stringad,stringt);voiddisplay();protected:stringname;intage;charsex;stringtitle;stringaddr;stringtel;);Teacher::Teacher(stringnam,inta,chars,stringtit,stringad,stringt):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){}voidTeacher::display(){cout<<"name:"<<name<<endl;cout<<"age"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"title:"<<title<<endl;cout<<"address:"<<addr<<endl;cout<<"tel:"<<tel<<endl;)classCadre{public:Cadre(stringnam,inta,chars,stringp,stringad,stringt);voiddisplay();protected:stringname;intage;charsex;stringpost;stringaddr;stringtel;);Cadre::Cadre(stringnam,inta,chars,stringp,stringad,stringt):name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}voidCadre::display(){cout<<"name:"<<name<<endl;cout<<"age:"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"post:"<<post<<endl;cout<<"address:"<<addr<<endl;cout<<"tel:"<<tel<<endl;}classTeacher_Cadre:publicTeacher,publicCadre{public:Teacher_Cadre(stringnam,inta,chars,stringtit,stringp,stringad,stringt,floatw);voidshow();private:floatwage;};Teacher_Cadre::Teacher_Cadre(stringnam,inta,chars,stringt,stringp,stringad,stringtel,floatw):Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w){}voidTeacher_Cadre::show(){Teacher::display();cout<<"post:"<<Cadre::post<<endl;cout<<"wages:"<<wage<<endl;intmain(){Teacher_Cadrete_ca("Wang-li",50,'f',"prof.","president","135BeijingRoad,Shanghai","(021)61234567",1534.5);te_ca.show();return0;)D:\C4-4-\6C3).exename:Wancj-liage50sex:ftitle:praf.address:135BeijingHoadJ.Sharghaitel:<021>61234567post"ppesidsntijages:1534.5Processexiteduithreturnvaluc3PressanyKeytocontinue!...微軟拼音半4.按下列要求編寫程序。(1)定義一個分數(shù)類Sc。re。它有3個數(shù)據(jù)成員:Chinese 〃語文課成績English 〃英語課成績Mathematics//數(shù)學課成績2個構造函數(shù):無參的和帶參數(shù)的3個成員函數(shù):是否帶參數(shù)根據(jù)需要自定sum() 〃計算三門課總成績print() 〃輸出三門課成績和總成績modify() 〃修改三門課成績(2)定義一個學生類Student。它有3個數(shù)據(jù)成員:Num 〃學號Name 〃姓名MyScore //成績2個構造函數(shù):無參的和帶參數(shù)的3個成員函數(shù):是否帶參數(shù)根據(jù)需要自定sum() 〃計算某學生三門課總成績print() 〃輸出某學生學號、姓名和成績modify() 〃修改某學生學號、姓名和成績(3)在主函數(shù)中,先定義一個學生類對象數(shù)組,再通過for循環(huán)給對象數(shù)組賦上實際值,最后輸出對象數(shù)組個元素的值。#include<iostream>#include<string>usingnamespacestd;classscore(public:score()(chinese=0;english=0;mathematics=0;)score(floatch,floaten,floatma):chinese(ch),english(en),mathematics(ma){}floatsum();voidprint();voidmodify();private:floatchinese;floatenglish;floatmathematics;};classstudent(public:student():myscore(0,0,0)(num="000000000";name="無";)student(stringn,stringna,floatm,floatc,floate):num(n),name(na),myscore(m,c,e){}floatsum();voidprint();voidmodify();private:stringnum;stringname;scoremyscore;);floatscore::sum()(return(chinese+english+mathematics);)voidscore::print()(cout<<"語文"<<chinese<<endl;cout<<"英語"<<english<<endl;cout<<"數(shù)學"<<mathematics<<endl;cout<<"總成績"<<sum()<<endl;cout<<endl<<endl<<endl;)voidscore::modify()(cout<<"請輸入三門成績"<<endl;cin>>chinese;cin>>english;cin>>mathematics;cout<<endl<<endl<<endl;)floatstudent::sum()(return(myscore.sum());)voidstudent::print()(cout<<"學號:"<<num<<endl;cout<<"姓名:"<<name<<endl;myscore.print();)voidstudent::modify()(cout<<"請輸入學號,姓名和成績:"<<endl;cin>>num;cin>>name;myscore.modify();)intmain()(studentst[3];cout<<"請輸入學生信息:"<<endl;for(inti=0;i<3;i++)(st[i].modify();)for(inti=0;i<3;i++)(st[i].print();)return0;
□D:\c++\8(4).exeD:\c++\6(4)情輸入三門成績清輸入三一成績,抖音半口學姓名;小紅|諳文8?!鮀:\c++\8(4).exeD:\c++\6(4)情輸入三門成績清輸入三一成績,抖音半口學姓名;小紅|諳文8。央治于6忸鵲總成績272姓名詞頻看文77請88段學界4椀學
:l,:d6Bk8B靖抖5.編寫一個程序實現(xiàn)小型公司的人員信息管理系統(tǒng)。該公司雇員(employee)包括經理(manager),技術人員(technician)、銷售員(salesman)和銷售部經理(salesmanager)。要求存儲這些人員的姓名、編號、級別、當月薪水,計算月薪并顯示全部信息。程序要對所有人員有提升級別的功能。為簡單起見,所有人員的初始級別均為1,然后進行升級,經理升為4級,技術人員和銷售部經理升為3級,銷售員仍為1級。月薪計算辦法是:經理拿固定月薪8000元,技術人員按每小時100元領取月薪,銷售員按該當月銷售額4%提成,銷售經理既拿固定月工資也領取銷售提成,固定月工資為5000元,銷售提成為所管轄部門當月銷售額的5%。。#include<iostream>#include<string>usingnamespacestd;classemployee//虛基類(public:employee()(cout<<"職工編號:";cin>>ID;cout<<"職工姓名:";cin>>name;salary=0;//月薪)virtualvoidpay()=0;//月薪計算函數(shù)virtualvoidshow()=0;protected:stringname;//姓名intID;//職工編號doublesalary;//月薪);classtechnician:virtualpublicemployee(public:technician(){perhour=20;}//每小時附加酬金voidpay(){cout<<"請輸入技術工人本月工作時數(shù):5";cin>>hours;salary=perhour*hours;}voidshow(){cout<<"技術人員"<<name<<"(編號為"<<ID<<")"<<"本月工資:"<<salary<<endl;}prote
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提前終止物業(yè)合同范本
- 2025-2030中國大鋼琴行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國四季帳篷行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國商務DECT手機行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國合成纖維地毯行業(yè)發(fā)展分析及前景趨勢與投資研究報告
- 2025-2030中國可重復使用的護理墊行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國雙氫鏈霉素行業(yè)發(fā)展分析及投資前景預測研究報告
- 2025-2030中國危重病和慢性病護理產品行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國鹵素水分測定儀行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國醫(yī)用氣瓶閥行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 員工法制教育培訓
- 湖北省武漢市外國語學校2024-2025學年九年級下學期3月月考數(shù)學試卷 (原卷版+解析版)
- 遼寧省名校聯(lián)盟2024-2025學年高三下學期3月份聯(lián)合考試歷史試題(含解析)
- 廣東省廣州市普通高中畢業(yè)班2025年綜合測試(一)地理試卷 (含答案)
- 2025年全國普通話水平測試20套復習題庫及答案
- 芭蕾動作損傷預防策略-深度研究
- DB11∕T1273-2024 LED交通誘導顯示屏技術要求
- 中藥學試題庫含答案
- 新進員工反洗錢知識培訓課件
- 高一下學期第一次月考數(shù)學試卷(基礎篇)
- 第三課 追求民主價值 教學設計-2023-2024學年統(tǒng)編版道德與法治九年級上冊
評論
0/150
提交評論