




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、- 繼承與派生繼承與組合一、實(shí)驗(yàn)?zāi)康? 了解繼承在面向?qū)ο蟪绦蛟O(shè)計(jì)中的重要作用。2進(jìn)一步理解繼承與派生的概念。3掌握通過繼承派生出一個(gè)新的類的方法。4了解虛基類的作用和用法。5掌握類的組合二、實(shí)驗(yàn)內(nèi)容1 請(qǐng)先閱讀下面的程序,寫出程序運(yùn)行的結(jié)果,然后再上機(jī)運(yùn)行程序,驗(yàn)證自己分析的結(jié)果是否正確。(1)#include <iostream> using namespace std; class A public:A()cout<<"A:A() called.n"virtualA()cout<<"A:A()called.n"
2、;class B:public A public:B(int i)cout<<"B:B() called.n"buf=new chari;virtual B() delete buf;cout<<"B:B() called.n"private:char *buf;void fun(A *a) cout<<"May you succeed!"<<endl; delete a;int main()A *a=new B(15);fun(a);return 0;1、1) 程序運(yùn)行結(jié)果:A:A()
3、 called.B:B() called.May you succeed!B:B() called.A:A() called.(2)#include<iostream>using namespace std;class Apublic:A(int a,int b):x(a),y(b) cout<<"A constructor."<<endl;void Add(int a,int b) x+=a;y+=b;voiddisplay() cout<<"("<<x<<","
4、;<<y<<")" A()cout<<"destructor A."<<endl;private:int x,y;class B:private Aprivate:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d) ,Aobj(1,1) cout<<"B constructor."<<endl; void Add(int x1,int y1,int x2,int y2) A:Add(x
5、1,y1);i+=x2; j+=y2;void display()A:display();Aobj.display();cout<<"("<<i<<","<<j<<")"<<endl;B()cout<<"destructor B."<<endl; ;int main()B b(1,2,3,4); b.display(); b.Add(1,3,5,7); b.display();return 0;( 2) 程序運(yùn)行結(jié)果:A
6、 constructor.A constructor.B constructor.(1,2) (1,1) (3,4) (2,5) (1,1) (8,11) destructor B.destructor A. destructor A.(3)#include<iostream>using namespace std;class Apublic:A(inta):x(a)cout<<"Aconstructor."<<x<<endl;int f()return +x; A()cout<<"destructor
7、A."<<endl;private:int x;class B:public virtual Aprivate:int y;A Aobj;public:B(inta,intb,intc):A(a),y(c),Aobj(c)cout<<"Bconstructor."<<y<<endl;int f()A:f();Aobj.f();return +y;voiddisplay()cout<<A:f()<<"t"<<Aobj.f()<<"t"
8、;<<f()<<e ndl; B()cout<<"destructor B."<<endl;class C:public Bpublic:C(int a,int b,int c):B(a,b,c),A(0) cout<<"C constructor."<<endl; ;class D:public C,public virtual Apublic:D(int a,int b,int c):C(a,b,c),A(c) cout<<"D constructor.&q
9、uot;<<endl;D()cout<<"destructor D."<<endl;int main()D d(7,8,9);d.f();d.display();return 0;( 3) 程序運(yùn)行結(jié)果:A constructor.9A constructor.9B constructor.9C constructor.D constructor.121211 destructor D.destructor B.destructor A.destructor A.(4)#include <iostream>using name
10、space std;class Base1public:Base1()cout<<"class Base1!"<<endl;class Base2public:Base2()cout<<"class Base2!"<<endl;class Level1:public Base2,virtual public Base1public:Level1()cout<<"class Level1!"<<endl;class Level2: public Base2,virt
11、ual public Base1public:Level2()cout<<"class Level2!"<<endl;class TopLevel:public Level1,virtual publicLevel2public:TopLevel()cout<<"class TopLevel!"<<endl;int main()TopLevel obj;return 0;( 4) 程序運(yùn)行結(jié)果:class Base1!class Base12class Leve12!class Base2!class Le
12、ve11!class TopLeve1!2某出版系統(tǒng)發(fā)行圖書和磁帶,利用繼承設(shè)計(jì)管理出版物的類。要求如下:建立一個(gè)基類Publication 存儲(chǔ)出版物的標(biāo)題title、 出版物名稱name、單價(jià)price 及出版日期date。用Book 類和 Tape 類分別管理圖書和磁帶,它們都從Publication 類派生。Book 類具有保存圖書頁數(shù)的數(shù)據(jù)成員page, Tape 類具有保存播放時(shí)間的數(shù)據(jù)成員playtime 。 每個(gè)類都有構(gòu)造函數(shù)、析構(gòu)函數(shù),且都有用于從鍵盤獲取數(shù)據(jù)的成員函數(shù)inputData() , 用 于 顯 示 數(shù) 據(jù) 的 成 員 函 數(shù) display() 。2、#incl
13、ude <iostream>using namespace std;#include <string>class Datepublic:Date()Date(int y,int m,int d);Date(Date &d);void SetDate(int y,int m,int d);void ShowDate();private:int year,month,day;Date:Date(int y,int m,int d) year=y;month=m; day=d; Date:Date(Date &d) year=d.year;month=d.mo
14、nth; day=d.day; void Date:SetDate(int y,int m,int d) year=y; month=m; day=d; void Date:ShowDate() cout<<year<<" 年 "<<month<<" 月 "<<day<<"日 "<<endl; class Timepublic:Time()Time(int h,int m,int s);Time(Time &t);void SetTime(in
15、t h,int m,int s);void ShowTime();private:int hour,minute,second;Time:Time(int h,int m,int s) hour=h;minute=m; second=s; Time:Time(Time &t) hour=t.hour;minute=t.minute; second=t.second; void Time:SetTime(int h,int m,int s) hour=h; minute=m; second=s; voidTime:ShowTime()cout<<hour<<&qu
16、ot;:"<<minute<<":"<<second<< endl; class Publicationpublic:Publication()Publication(string title,string name,float price,int y,int m,int d);void inputData();void display();private:string title;string name;float price;Date date;Publication:Publication(stringtitl
17、e,stringname,float price,int y,int m,int d) :title(title),name(name),price(price),date(y,m,d) void Publication:inputData() cout<<"Please input title, name, price, publication date of a book:"<<endl;cin>>title>>name>>price;int year,month,day;cin>>year>
18、>month>>day;date.SetDate(year,month,day);void Publication:display() cout<<"title="<<title<<endl; cout<<"name="<<name<<endl; cout<<"price="<<price<<endl; cout<<"date="date.ShowDate();class Boo
19、k:public Publicationpublic:Book()Book(string title,string name,float price,int y,int m,int d,int page);void inputData();void display();private:int page;Book:Book(string title,string name,float price,int y,int m,int d,int page):Publication(title,name,price,y,m,d)this->page= page;void Book:inputDat
20、a() Publication:inputData();cout<<"Please the pages of the book:"<<endl;cin>>page;void Book:display() Publication:display();cout<<"page="<<page<<endl;class Tape:public Publicationpublic:Tape()Tape(string title,string name,float price,inty,int m
21、,int d,Time playtime);void inputData();void display();private:Time playtime;Tape:Tape(string title,string name,float price,int y,int m,int d,Time playtime):Publication(title,name,price,y,m,d),playtime(pl aytime)void Tape:inputData() Publication:inputData();cout<<"Please the playtime of th
22、e tape:"<<endl;int hour,minute,second;cin>>hour>>minute>>second;playtime.SetTime(hour,minute,second);void Tape:display() Publication:display();cout<<"playtime="playtime.ShowTime();int main() Book book1(" 教 材 ","C+ 程 序 設(shè) 計(jì)",30.00,2009,6
23、,1,300);book1.display();cout<<endl;Time time1(30,10,20);Tape tape1(" 磁 帶 ","C+ 程 序 設(shè) 計(jì) 視 頻 ",10.00,2009,8,1,time1);tape1.display();Book book2; book2.inputData(); book2.display(); cout<<endl;Tape tape2; tape2.inputData(); tape2.display(); return 0;3分別定義教師類Teacher 和干部類C
24、adre,采用多重繼承的方式由這兩個(gè)類派生出新類Teacher_Cadre(教師兼干部類)。要求:( 1)在兩個(gè)基類中都包含姓名、年齡、性別、地址、電話數(shù)據(jù)成員。( 2)在Teacher類中還包含數(shù)據(jù)成員職稱title,在 Cadre 類中還包含數(shù)據(jù)成員職務(wù)post,在Teacher_Cadre 類中還包含數(shù)據(jù)成員工資wage。( 3)對(duì)兩個(gè)基類中的姓名、年齡、性別、地址、電話數(shù)據(jù)成員用相同的名字,在訪問這類數(shù)據(jù)成員時(shí),指定作用域。( 4)在類體中聲明成員函數(shù),在類外定義成員函數(shù)。( 5) 在派生類Teacher_Cadre 的成員函數(shù)show中調(diào)用 Teacher類中的 display 函數(shù)
25、, 輸出姓名、年齡、性別、地址、電話,然后再用cout 語句輸出職務(wù)和工資。3、#include<string>#include <iostream>using namespace std;class Teacherpublic:Teacher(string nam,int a,char s,string tit,string ad,string t);void display();protected:string name;int age;char sex;string title;string addr;string tel;Teacher:Teacher(stri
26、ng nam,int a,char s,string tit,string ad,string t):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t)void Teacher:display()cout<<"name:"<<name<<endl;cout<<"age"<<age<<endl; cout<<"sex:"<<sex<<endl; cout<<"
27、title:"<<title<<endl;cout<<"address:"<<addr<<endl;cout<<"tel:"<<tel<<endl;class Cadrepublic:Cadre(string nam,int a,char s,string p,string ad,string t);void display();protected:string name;int age;char sex;string post;string add
28、r;string tel;Cadre:Cadre(string nam,int a,char s,string p,string ad,string t): name(nam),age(a),sex(s),post(p),addr(ad),tel(t) void Cadre:display() cout<<"name:"<<name<<endl;cout<<"age:"<<age<<endl; cout<<"sex:"<<sex<&l
29、t;endl; cout<<"post:"<<post<<endl; cout<<"address:"<<addr<<endl; cout<<"tel:"<<tel<<endl;class Teacher_Cadre:public Teacher,public Cadrepublic:Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,strin
30、g t,float w);void show( );private:float wage;Teacher_Cadre:Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w):Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) void Teacher_Cadre:show( ) Teacher:display();cout<<"post:"<<Cadre:post<&
31、lt;endl;cout<<"wages:"<<wage<<endl;int main( )Teacher_Cadrete_ca("Wang-li",50,'f',"prof.","president","135BeijingRoad,Shanghai","(021)61234567",1534.5);te_ca.show( );return 0;modify()/修改三門課成績2)定義一個(gè)學(xué)生類Student。它有3 個(gè)數(shù)
32、據(jù)成員:Num/學(xué)號(hào)Name/姓名MyScore/成績2 個(gè)構(gòu)造函數(shù):無參的和帶參數(shù)的3 個(gè)成員函數(shù):是否帶參數(shù)根據(jù)需要自定sum()/計(jì)算某學(xué)生三門課總成績print()/輸出某學(xué)生學(xué)號(hào)、姓名和成績modify()/修改某學(xué)生學(xué)號(hào)、姓名和成績3) 3) 在主函數(shù)中,先定義一個(gè)學(xué)生類對(duì)象數(shù)組,再通過 for 循環(huán)給對(duì)象數(shù)組賦上實(shí)際值,最后輸出對(duì)象數(shù)組個(gè)元素的值。4)#include<iostream>#include<string> using namespace std;class scorepublic:score()chinese=0;english=0;math
33、ematics=0;score(floatch,floaten,floatma):chinese(ch),english(en),mathematics(ma)float sum();void print();void modify();private:float chinese;float english;float mathematics;class studentpublic:student(): myscore(0,0,0)num="000000000"name=" 無 "student(string n,string na,float m,fl
34、oat c,float e):num(n),name(na),myscore(m,c,e)float sum();void print();void modify();private:string num;string name;score myscore;float score:sum()return(chinese+english+mathematics);void score:print() cout<<" 語文"<<chinese<<endl;cout<<" 英語"<<english&l
35、t;<endl;cout<<" 數(shù)學(xué)"<<mathematics<<endl;cout<<" 總成績 "<<sum()<<endl;cout<<endl<<endl<<endl;void score:modify()cout<<" 請(qǐng)輸入三門成績"<<endl;cin>>chinese;cin>>english;cin>>mathematics;cout<&
36、lt;endl<<endl<<endl;float student:sum()return(myscore.sum(); void student:print()cout<<" 學(xué)號(hào):"<<num<<endl;cout<<" 姓名:"<<name<<endl;myscore.print();void student:modify()cout<<" 請(qǐng)輸入學(xué)號(hào),姓名和成績:"<<endl;cin>>num;
37、cin>>name;myscore.modify();int main()student st3;cout<<" 請(qǐng)輸入學(xué)生信息:"<<endl;for(int i=0;i<3;i+)sti.modify();for(int i=0;i<3;i+)sti.print();return 0;5編寫一個(gè)程序?qū)崿F(xiàn)小型公司的人員信息管employee)包括經(jīng)理manager) ,技術(shù)人員(technician) 、銷售員salesman) 和銷售部經(jīng)理( salesmanager) 。 要求存儲(chǔ)這些人員的姓名、編號(hào)、 級(jí)別、 當(dāng)月薪水
38、,計(jì)算月薪并顯示全部信息。程序要對(duì)所有人員有提升級(jí)別的功能。為簡單起見,所有人員的初始級(jí)別均為1,然后進(jìn)行升級(jí), 經(jīng)理升為4 級(jí), 技術(shù)人員和銷售部經(jīng)理升為3 級(jí),銷售員仍為1 級(jí)。月薪計(jì)算辦法是:經(jīng)理拿固定月薪8000 元,技術(shù)人員按每小時(shí)100 元領(lǐng)取月薪,銷售員按該當(dāng)月銷售額4%提成,銷售經(jīng)理既拿固定月工資也領(lǐng)取銷售提成,固定月工資為5000 元,銷售提成為所管轄部門當(dāng)月銷售額的5。#include<iostream>#include<string>using namespace std;class employee /虛基類public:employee()co
39、ut<<" 職工編號(hào):"cin>>ID;cout<<" 職工姓名:"cin>>name;salary=0; /月薪virtual void pay()=0; / 月薪計(jì)算函數(shù)virtual void show()=0;protected:string name; / 姓名int ID; / 職工編號(hào)double salary; / 月薪;class technician:virtual public employeepublic:technician()perhour=20; / 每小時(shí)附加酬金void p
40、ay()cout<<" 請(qǐng)輸入技術(shù)工人本月工作時(shí)數(shù):n"cin>>hours;salary=perhour*hours;void show()cout<<" 技 術(shù) 人 員"<<name<<"( 編 號(hào) 為 "<<ID<<")"<<" 本 月 工資 :"<<salary<<endl;protected:double hours; / 月工作時(shí)數(shù)double perhour; /
41、 月每小時(shí)附加時(shí)數(shù);class manager:virtual public employeepublic:manager()monthpay=8000;void pay()salary=monthpay;void show()cout<<" 經(jīng)理 "<<name<<"( 編號(hào)為 "<<ID<<")"<<" 本月工資:"<<salary<<endl;protected:double monthpay; / 固定工資;class salesman:virtual public em
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 退役重武器測(cè)試題及答案
- 2023-2024學(xué)年山西省太原市迎澤區(qū)三年級(jí)(上)期末數(shù)學(xué)試卷(含答案)
- 小黑子考試試題及答案
- 2025年消防設(shè)施操作員之消防設(shè)備高級(jí)技能押題練習(xí)試題A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能能力檢測(cè)試卷B卷附答案
- 2023年全國翻譯專業(yè)資格(水平)考試英語三級(jí)筆譯實(shí)務(wù)試題真題及答案
- 配電柜知識(shí)培訓(xùn)課件
- 卸妝膏護(hù)膚知識(shí)培訓(xùn)課件
- 小紅船讀后感
- 市場(chǎng)營銷策略制定服務(wù)協(xié)議
- 正念八周課件
- 光伏發(fā)電監(jiān)理合同協(xié)議
- 新能源汽車概論課件 3.1認(rèn)知純電動(dòng)汽車
- 河北美術(shù)出版社小學(xué)六年級(jí)下冊(cè)書法練習(xí)指導(dǎo)教案
- 《食品標(biāo)準(zhǔn)與法規(guī)》知識(shí)考試題庫300題(含答案)
- 基本樂理及音樂常識(shí)類知識(shí)考試題及答案
- 人教版(2024)七年級(jí)上冊(cè)英語各單元短文填空練習(xí)題匯編(含答案解析)
- 《環(huán)境保護(hù)與國家安全》高效備課課件
- 建筑竣工驗(yàn)收表格資料大全
- 主題二生活物品小改造(教學(xué)設(shè)計(jì))遼師大版四年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)
- 中醫(yī)內(nèi)科學(xué)智慧樹知到答案2024年浙江中醫(yī)藥大學(xué)
評(píng)論
0/150
提交評(píng)論