面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告
《面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告》由會員分享,可在線閱讀,更多相關(guān)《面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告(18頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告 面向?qū)ο蟪绦蛟O(shè)計 (C++) 實驗報告 姓名: 學(xué)院:數(shù)學(xué)與計算機學(xué)院 班級:10級計算機大類班 學(xué)號: 實驗5 單繼承 一、實驗?zāi)康?1.掌握派生的類別與方式; 2.了解派生類中如何使用基類的成員、基類成員在派生類中的訪問控制; 3. 掌握繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用過程。 二、實驗內(nèi)容及步驟 1. 給出一個Document類,從Document派生出Book類,增加PageCount變量。在主函數(shù)中進行測試,創(chuàng)建Book類對象并進行初始化,輸出書名和頁數(shù)。 2. 設(shè)計一個單基繼承的類層次程序,利用Pe
2、rson類派生出Student類,增加屬性xh(學(xué)號),Person類中至少有姓名、年齡等數(shù)據(jù)成員,成員函數(shù)中構(gòu)造函數(shù)對其初始化,析構(gòu)函數(shù)釋放相應(yīng)存儲單元,輸出函數(shù)輸出其數(shù)據(jù)成員的值,其它成員函數(shù)根據(jù)需要添加,在主函數(shù)中進行測試。 3. 設(shè)計一個人員類person和一個日期類date,由人員類派生出學(xué)生類student和教師類professor,學(xué)生類和教師類的數(shù)據(jù)成員birthday為日期類。在主函數(shù)中進行測試。 三、實驗程序和運行結(jié)果 實驗(一)程序: _include<iostream> _include<string> using namespace std;
3、class Document { public: Document{}; ~Document; Document(char*name); char *Name; void PrintNameOf; }; Document::Document(char*name) { Name=new char[strlen(name+1)]; strcpy(Name,name); } Document::~Document{ delete []Name; } void Document::PrintNameOf { cout<<Name<<endl; }
4、class Book:public Document { public: int PageCount; Book(char *a,int b):Document(a) { PageCount=b; } }; void main { char BookName[20]; int n; cout<<“請輸入書名:“<<endl; cin>>BookName; cout<<“請輸入書的頁數(shù):“<<endl; cin>>n; Book b(BookName,n); cout<<“書名為:“<&l
5、t;b.Name<<endl; cout<<“頁數(shù)為:“<<b.PageCount<<endl; } 運行結(jié)果: 實驗(二)程序: _include<iostream> _include<string> using namespace std; class person{ public: person{ name=“張三“; age=0; } person(string c,int a){ name=c; age=a; } ~person{} void setname(string c){ n
6、ame=c; } string getname{ return name; } void setage(int a){ age=a; } int getage{ return age; } private: string name; int age; }; class student:public person { public: student{ xh=0; } student(int d){ xh=d; } student(string c,int a,int d):person(c,a){ xh=d; } ~student{} v
7、oid setxh(int d){ xh=d; } int getxh{ return xh; } private: int xh; }; void main{ string c; cout<<“請輸入學(xué)生的姓名:\n“; cin>>c; cout<<“請輸入學(xué)生的年齡:\n“; int a; cin>>a; cout<<“請輸入學(xué)生的學(xué)號:\n“; int d; cin>>d; student n(c,a,d); cout<<“請輸入學(xué)生的姓名為: “<<n.getname<<e
8、ndl; cout<<“請輸入學(xué)生的年齡為: “<<n.getage<<endl; cout<<“請輸入學(xué)生的學(xué)號為: “<<n.getxh<<endl; } 運行結(jié)果: 實驗(三)程序: _include<iostream> using namespace std; class person{ public: person{ name=“張三“; age=0; } person(string c,int a){ name=c; age=a; } ~person{
9、} void setname(string c){ name=c; } string getname{ return name; } void setage(int a){ age=a; } int getage{ return age; } private: string name; int age; }; class date{ public: date{ year=2022; month=12; day=17; } ~date{} date(int y,int m,int d){ year=y; month=m; day
10、=d; } int getyear{ return year; } int getmonth{ return month; } int getday{ return day; } private: int year; int month; int day; }; class student:public person{ public: student{ // birthday.date; } student(int y,int m,int d):birthday(y,m,d) { } ~student{} void getbirthday{
11、 cout<<“學(xué)生的生日為:\n“; cout<<birthday.getyear<<“年“<<birthday.getmonth<<“月“<<birthday.getday<<“日“<<endl; } private: date birthday; }; class teacher:public person{ public: teacher{ // birthday.date; } teacher(int y,int m,int d):birthday(y,m,d) {
12、//birthday.date(y,m,d); } ~teacher{} void getbirthday{ cout<<“老師的生日為:\n“; cout<<birthday.getyear<<“年“<<birthday.getmonth<<“月“<<birthday.getday<<“日“<<endl; } private: date birthday; }; void main{ cout<<“請輸入學(xué)生的生日:“<<endl; int y,m,d
13、; cin>>y>>m>>d; student s(y,m,d); cout<<“請輸入老師的生日:“<<endl; cin>>y>>m>>d; teacher t(y,m,d); s.getbirthday; t.getbirthday; } 運行結(jié)果: 實驗6 多繼承 一、實驗?zāi)康?1.掌握多基繼承的使用,訪問方法; 2.理解類層次中訪問規(guī)則; 3.掌握虛基類的定義及使用。 二、實驗內(nèi)容及步驟 1. 定義一個學(xué)生類Student和教師類Teacher,學(xué)生類有姓名、學(xué)號、私有數(shù)據(jù)成員,教師類有姓名、工作證號、職稱、課程、周學(xué)時數(shù)
14、。再定義一個助教類TA,繼承學(xué)生類和教師類,該類可以使用學(xué)生類的全部數(shù)據(jù)成員,以及教師類的課程和周學(xué)時數(shù)的數(shù)據(jù)成員。要求:每個類提供自定義的構(gòu)造函數(shù)和析構(gòu)函數(shù),并通過同名函數(shù)ShowInfo來顯示全部數(shù)據(jù)成員的值。 2. 設(shè)計一個虛基類Person,包含姓名和年齡私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù);由它派生出領(lǐng)導(dǎo)類Leader,包含職務(wù)和部門私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù);再由Person派生出工程師類Engineer,包含職務(wù)和專業(yè)私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù);再由Leader和Engineer類派生出主任工程師類Chairman。并采用相關(guān)數(shù)據(jù)進行測試。 三、實驗程序和運行結(jié)果 實驗
15、(一)程序: _include<iostream.h> _include<string.h> class Student{ protected: char s_name[20]; int id_s; public: Student(char *name,int id); void ShowInfo; }; class Teacher{ protected: char t_name[20]; int id_t; char position[30]; char lesson[30]; int hour; public: Teacher(char *pos,in
16、t h); Teacher(char *name,int id,char *less,char *pos,int h); void ShowInfo; }; class TA:public Student,public Teacher{ public: TA(char *name,char id,char *less,int h); void ShowInfo; }; Student::Student(char *name,int id){ strcpy(s_name,name); id_s=id; } void Student::ShowInfo{ cout<<“
17、姓名:“<<s_name<<'\t'<<“學(xué)號:“<<id_s<<endl; } Teacher::Teacher(char *less,int h){ strcpy(lesson,less); hour=h; } Teacher::Teacher(char *name,int id,char *less,char *pos,int h){ strcpy(t_name,name); strcpy(lesson,less); strcpy(position,pos); id_t=id; hour=h; } void Te
18、acher::ShowInfo{ cout<<“姓名:“<<t_name<<'\t'<<“職工號:“<<id_t<<'\t'<<“職稱:“<<position<<'\t'<<“課程:“<<lesson<<'\t'<<“學(xué)時數(shù):“<<hour<<endl; } TA::TA(char *name,char id,char *less,int h):Student(name,id),Teacher(less,h){}
19、 void TA::ShowInfo{ Student::ShowInfo; cout<<“課程:“<<lesson<<'\t'<<“學(xué)時數(shù):“<<hour<<endl; } void main{ TA ta(“劉九州“,14,“c++“,64); ta.ShowInfo; } 運行結(jié)果: 實驗(二)程序: _include<iostream.h> _include<string.h> class Person{ //虛基類person類 char name[30]; int
20、 age; public: Person(char *n,int a); void setname(char *n); void setage(int a); char *getname; int getage; }; class Leader:virtual public Person{ //領(lǐng)導(dǎo)類 char job[30]; //職務(wù) char dep[30]; //部門 public: Leader(char *jb,char *dp); void setjob(char *jb); void setdep(char *dp); char *getjob; cha
21、r *getdep; }; class Engineer:virtual public Person{ //工程師類 char major[30]; //專業(yè) char prof[30]; //職稱 public: Engineer(char *maj,char *pf); void setmajor(char *maj); void setprof(char *pf); char *getmajor; char *getprof; }; class Chairman:public Leader,public Engineer{ //主任工程師類 publ
22、ic: Chairman(char *n,int a,char *jb,char *dp,char *maj,char *pf); void disp; }; Person::Person(char *n,int a){ strcpy(name,n); age=a; } void Person::setname(char *n){ strcpy(name,n); } void Person::setage(int a){ age=a; } char *Person::getname{ return name; } int Person::getage{ return age;
23、} Leader::Leader(char *jb,char *dp):Person(““,30){ strcpy(job,jb); strcpy(dep,dp); } void Leader::setjob(char *jb){ strcpy(job,jb); } void Leader::setdep(char *dp){ strcpy(dep,dp); } char *Leader::getjob{ return job; } char *Leader::getdep{ return dep; } Engineer::Engineer(char *maj,char *pf
24、):Person(““,30){ strcpy(major,maj); strcpy(prof,pf); } void Engineer::setmajor(char *maj){ strcpy(major,maj); } void Engineer::setprof(char *pf){ strcpy(prof,pf); } char *Engineer::getmajor{ return major; } char *Engineer::getprof{ return prof; } Chairman::Chairman(char *n,int a,char *jb,char
25、*dp,char *maj,char *pf):Person(n,a),Leader(jb,dp),Engineer(maj,pf){} void Chairman::disp{ cout<<“姓名:“<<getname<<'\t'<<“年齡:“<<getage<<'\t'<<“職務(wù):“<<getjob<<'\t'<<“部門:“<<getdep<<'\t'<<“專業(yè):“<<getmajor<<'\t'<&l
26、t;“職稱:“<<getprof<<endl; } void main{ Chairman c(“劉九州“,21,“廳長“,“財政廳“,“經(jīng)濟學(xué)“,“高級經(jīng)濟師“); c.disp; } 運行結(jié)果: 實驗7 多態(tài)與虛函數(shù) 一、實驗?zāi)康?1.理解多態(tài)的概念 2.掌握如何用虛函數(shù)實現(xiàn)運行時多態(tài) 3.掌握如何利用抽象類 二、實驗內(nèi)容及步驟 1. 設(shè)計一個圖形類(Shape),由它派生出三角形類(Triangle)、正方形類(Square)、圓形類(Circle),利用虛函數(shù)計算圖形面積,并在主函數(shù)中進行測試。 2. 定義一個教師類,由教師類派生出講師、副教授、
27、教授類。教師的工資分別由基本工資、課時費和津貼構(gòu)成。假設(shè)講師、副教授、教授的基本工資分別為800、900、1000元,課時費分別為每小時40、45、50元,津貼分別為1300、1800、2300。定義虛函數(shù)來計算教師的工資,并通過主函數(shù)來進行驗證。 三、實驗程序和運行結(jié)果 實驗(一)程序: _include<iostream> using namespace std; class Shape { public: virtual float area {return 0.0;} }; class Triangle:public Shape { public: Triangle
28、 {bc=1.0;h=1.0;} Triangle(float bc,float h) { this->bc=bc;this->h=h;} bool setbc(float a) {if(a>0)bc=a;} float getbc {return bc;} bool setg(float b) {if(b>0)h=b;} float getg {return h;} float area {return bc*h/2;} protected: float bc,h; }; class Square:public Shape { public: Square
29、 {l=1.0;} Square(float m) {this->l=m;} bool setbc(float c) {if(c>0)l=c;} float getbc {return l;} float area {return l*l;} protected: float l; }; class Circle:public Shape { public: Circle {radius=1.0;} Circle(float R) { this->radius=R;} bool setRadius(float r) {if(r>0)radius=r;} floa
30、t getRadius {return radius;} float area {return 3.14159*radius*radius;} protected: float radius; }; void displayShapeArea(Shape *p) { cout<<“圖形面積為:“<<p->area<<endl; } void main { Shape *p1,*p2,*p3; Triangle T(15.0,10.0); Square S(10.0); Circle C(10.0); p1=&;T; p2=&;S; p
31、3=&;C; displayShapeArea(p1); displayShapeArea(p2); displayShapeArea(p3); } 運行結(jié)果: 實驗(二)程序: _include<iostream> using namespace std; class teacher { public: virtual float wage {return 0.0;} }; class lecturer:public teacher { public: lecturer {WorkHours=1.0;} lecturer(float WorkHours
32、) { this->WorkHours=WorkHours; } bool setWorkHours(float h) { if(h>0)WorkHours=h;} float getWorkHours {return WorkHours;} float wage { return (800+40*WorkHours+1300); } protected: float WorkHours; }; class AssociateProfessor:public teacher { public: AssociateProfessor {WorkHours=1.
33、0;} AssociateProfessor(float WorkHours) { this->WorkHours=WorkHours; } bool setWorkHours(float h) { if(h>0)WorkHours=h;} float getWorkHours {return WorkHours;} float wage { return (900+45*WorkHours+1800); } protected: float WorkHours; }; class Professor:public teacher { public: Pro
34、fessor {WorkHours=1.0;} Professor(float WorkHours) { this->WorkHours=WorkHours; } bool setWorkHours(float h) { if(h>0)WorkHours=h;} float getWorkHours {return WorkHours;} float wage { return (1000+50*WorkHours+2300); } protected: float WorkHours; }; void displayWage(teacher *s) {
35、cout<<“工資為:“<<s->wage<<endl; } void main { teacher *s1,*s2,*s3; lecturer L(30.5); AssociateProfessor A(20.6); Professor P(10.5); s1=&;L; s2=&;A; s3=&;P; displayWage(s1); displayWage(s2); displayWage(s3); } 運行結(jié)果: 實驗8 運算符重載 一、實驗?zāi)康?掌握C++中運算符重載的機制和運算符重載的方式; 二、實驗內(nèi)容及步驟 1.
36、 編寫一個簡單復(fù)數(shù)類Splex,要求用友元函數(shù)重載“+”、“-”運算符,用成員函數(shù)重載“=”運算符,使之能夠?qū)崿F(xiàn)整數(shù)或浮點數(shù)和復(fù)數(shù)的加法和減法,并且進行測試。 2. 空間一點p的坐標(biāo)為(x,y,z),其中x,y,z為整數(shù)。編寫點類Point3D,定義空間兩點之間的加”+”,減”-”運算為相應(yīng)三個坐標(biāo)值分別進行加、減運算,要求實現(xiàn)空間兩點之間的加”+”減”-”賦值”=”運算,空間兩點間的比較”= =”運算。要求編寫Point3D類的聲明定義和測試程序。 3. 設(shè)計一個時間類Time,包括時、分、秒等私有數(shù)據(jù)成員。重載“+”和“-”運算符以實現(xiàn)時間的加法和減法運算,并進行測試。 三、實
37、驗程序和運行結(jié)果 實驗(一)程序: _include<iostream.h> class Splex{ private: double real,imag; public: Splex{ real=0; //實部 imag=0; //虛部 } Splex(double x,double y) { real=x; imag=y; } Splex&; operator =(Splex s); double getreal { return real; } double getimag { return imag
38、; } friend Splex operator+(int i,Splex s); friend Splex operator+(double d,Splex s); friend Splex operator-(int i,Splex s); friend Splex operator-(double d,Splex s); }; Splex&; Splex::operator =(Splex s){ if(this==&;s) return *this; real=s.real; imag=s.imag; return *this; } Splex
39、operator+(int i,Splex s){ Splex t; t.real=i+s.real; t.imag=s.imag; return t; } Splex operator+(double d,Splex s){ Splex t; t.real=d+s.real; t.imag=s.imag; return t; } Splex operator-(int i,Splex s){ Splex t; t.real=i-s.real; t.imag=s.imag; return t; } Splex operator-(double d,Splex s){
40、Splex t; t.real=d-s.real; t.imag=s.imag; return t; } void main{ Splex s1(3.4,5.2),s2; s2=1+s1; cout<<“復(fù)數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<endl; s2=6.2+s1; cout<<“復(fù)數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<en
41、dl; s2=5-s1; cout<<“復(fù)數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<endl; s2=3.2-s1; cout<<“復(fù)數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<endl; } 運行結(jié)果: 實驗(二)程序: _include<iostream.h> class Point3D { public: Point3D { x=
42、1; y=1; z=1; } Point3D(int a,int b,int c) { x=a; y=b; z=c; } int getx { return x; } int gety { return y; } int getz { return z; } Point3D&; operator =(Point3D p); Point3D operator +(Point3D p); Point3D operator -(Point3D p); bool operator ==(Point3D p); private: in
43、t x,y,z; }; Point3D&; Point3D::operator =(Point3D p) { if(this==&;p) return *this; x=p.x; y=p.y; z=p.z; return *this; } Point3D Point3D::operator +(Point3D p) { Point3D t; t.x=x+p.x; t.y=y+p.y; t.z=z+p.z; return t; } Point3D Point3D::operator -(Point3D p) { Point3D t; t.x=x-p.x; t.y
44、=y-p.y; t.z=z-p.z; return t; } bool Point3D::operator ==(Point3D p) { if(x==p.x&;&;y==p.y&;&;z==p.z) return true; else return false; } void main { Point3D p1(1,2,3),p2(1,2,3),p3,p4; p3=p1+p2; cout<<“兩點相加后為: (“<<p3.getx<<“,“<<p3.gety<<“,“<<p3.getz<<
45、;“)“<<endl; p4=p2-p1; cout<<“兩點相減后為: (“<<p4.getx<<“,“<<p4.gety<<“,“<<p4.getz<<“)“<<endl; if(p1==p2) cout<<“p1=p2“<<endl; else cout<<“p1!=p2“<<endl; } 運行結(jié)果: 實驗(三)程序: _include<iostream.h> class Time { public:
46、 Time {hour=0; minute=0; second=0; } Time(int h,int m,int s) { hour=h; minute=m; second=s; } void setHour(int h) {hour=h;} void setMinute(int m) {minute=m;} void setSecond(int s) {second=s;} int getHour {return hour;} int getMinute {return minute;} int getSecond {return sec
47、ond;} void displayTime { cout<<hour<<“:“<<minute<<“:“<<second<<endl; } Time operator + (Time); Time operator - (Time); private: int hour; int minute; int second; }; Time Time::operator+(Time t){ int carry,hh,mm,ss; ss=second+t.getSecond; if(ss>60){
48、ss-=60; carry=1; } else carry=0; mm=minute+t.getMinute+carry; if(mm>60){ mm-=60; carry=1; } else carry=0; hh=hour+t.getHour+carry; if(hh>24) hh-=24; Time tt(hh,mm,ss); return(tt); } Time Time::operator-(Time t){ int borrow,hh,mm,ss; ss=second-t.getSecond; if(ss<0){ ss+=60;
49、 borrow=1; } else borrow=0; mm=minute-t.getMinute-borrow; if(mm<0){ mm+=60; borrow=1; } else borrow=0; hh=hour-t.getHour-borrow; if(hh<0) hh+=24; Time tt(hh,mm,ss); return(tt); } void main{ Time t1(13,2,40),t2(15,37,30),t3; t3=t1+t2; t3.displayTime; t3=t1-t2; t3.displayTime; } 運行結(jié)果: 第 18 頁 共 18 頁
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重點項目中央廚房建設(shè)項目可行性研究報告申請立項備案可修改案例
- 辦公用品清單及價格(文一)
- 《現(xiàn)行建筑設(shè)計規(guī)范大全(藍(lán)天版)》(更新至2012年9月)
- T1202-2_地基基礎(chǔ)工程各規(guī)范強制性條檢查記錄表(二)
- MP3成品檢驗規(guī)范
- 7《建設(shè)工程監(jiān)理規(guī)范》(GBT50319-2013)復(fù)習(xí)題
- 奶牛日糧分析
- 《現(xiàn)行建筑施工規(guī)范大全》目錄2013年3月3日更新版 (2)
- 《員工儀容儀表規(guī)范》知識重點111007
- 重點項目運輸專用車建設(shè)項目可行性研究報告申請立項備案可修改案例
- 《現(xiàn)行建筑設(shè)計規(guī)范大全》目錄2012年7月更新
- 重點項目鑄管特噴線建設(shè)項目可行性研究報告申請立項備案可修改案例
- java命名規(guī)范
- 34112_08清單規(guī)范工程量計算規(guī)則全套excel版
- 重點項目智能百葉窗建設(shè)項目可行性研究報告申請立項備案可修改案例