面向對象程序設計(C++)實驗報告

上傳人:Wo****C 文檔編號:51599825 上傳時間:2022-01-27 格式:DOC 頁數(shù):18 大小:39.50KB
收藏 版權申訴 舉報 下載
面向對象程序設計(C++)實驗報告_第1頁
第1頁 / 共18頁
面向對象程序設計(C++)實驗報告_第2頁
第2頁 / 共18頁
面向對象程序設計(C++)實驗報告_第3頁
第3頁 / 共18頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《面向對象程序設計(C++)實驗報告》由會員分享,可在線閱讀,更多相關《面向對象程序設計(C++)實驗報告(18頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、面向對象程序設計(C++)實驗報告 面向對象程序設計 (C++) 實驗報告 姓名: 學院:數(shù)學與計算機學院 班級:10級計算機大類班 學號: 實驗5 單繼承 一、實驗目的 1.掌握派生的類別與方式; 2.了解派生類中如何使用基類的成員、基類成員在派生類中的訪問控制; 3. 掌握繼承中構造函數(shù)和析構函數(shù)的調用過程。 二、實驗內(nèi)容及步驟 1. 給出一個Document類,從Document派生出Book類,增加PageCount變量。在主函數(shù)中進行測試,創(chuàng)建Book類對象并進行初始化,輸出書名和頁數(shù)。 2. 設計一個單基繼承的類層次程序,利用Pe

2、rson類派生出Student類,增加屬性xh(學號),Person類中至少有姓名、年齡等數(shù)據(jù)成員,成員函數(shù)中構造函數(shù)對其初始化,析構函數(shù)釋放相應存儲單元,輸出函數(shù)輸出其數(shù)據(jù)成員的值,其它成員函數(shù)根據(jù)需要添加,在主函數(shù)中進行測試。 3. 設計一個人員類person和一個日期類date,由人員類派生出學生類student和教師類professor,學生類和教師類的數(shù)據(jù)成員birthday為日期類。在主函數(shù)中進行測試。 三、實驗程序和運行結果 實驗(一)程序: _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; } 運行結果: 實驗(二)程序: _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<<“請輸入學生的姓名:\n“; cin>>c; cout<<“請輸入學生的年齡:\n“; int a; cin>>a; cout<<“請輸入學生的學號:\n“; int d; cin>>d; student n(c,a,d); cout<<“請輸入學生的姓名為: “<<n.getname<<e

8、ndl; cout<<“請輸入學生的年齡為: “<<n.getage<<endl; cout<<“請輸入學生的學號為: “<<n.getxh<<endl; } 運行結果: 實驗(三)程序: _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<<“學生的生日為:\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<<“請輸入學生的生日:“<<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; } 運行結果: 實驗6 多繼承 一、實驗目的 1.掌握多基繼承的使用,訪問方法; 2.理解類層次中訪問規(guī)則; 3.掌握虛基類的定義及使用。 二、實驗內(nèi)容及步驟 1. 定義一個學生類Student和教師類Teacher,學生類有姓名、學號、私有數(shù)據(jù)成員,教師類有姓名、工作證號、職稱、課程、周學時數(shù)

14、。再定義一個助教類TA,繼承學生類和教師類,該類可以使用學生類的全部數(shù)據(jù)成員,以及教師類的課程和周學時數(shù)的數(shù)據(jù)成員。要求:每個類提供自定義的構造函數(shù)和析構函數(shù),并通過同名函數(shù)ShowInfo來顯示全部數(shù)據(jù)成員的值。 2. 設計一個虛基類Person,包含姓名和年齡私有數(shù)據(jù)成員以及相關的成員函數(shù);由它派生出領導類Leader,包含職務和部門私有數(shù)據(jù)成員以及相關的成員函數(shù);再由Person派生出工程師類Engineer,包含職務和專業(yè)私有數(shù)據(jù)成員以及相關的成員函數(shù);再由Leader和Engineer類派生出主任工程師類Chairman。并采用相關數(shù)據(jù)進行測試。 三、實驗程序和運行結果 實驗

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'<<“學號:“<<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'<<“學時數(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'<<“學時數(shù):“<<hour<<endl; } void main{ TA ta(“劉九州“,14,“c++“,64); ta.ShowInfo; } 運行結果: 實驗(二)程序: _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{ //領導類 char job[30]; //職務 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'<<“職務:“<<getjob<<'\t'<<“部門:“<<getdep<<'\t'<<“專業(yè):“<<getmajor<<'\t'<&l

26、t;“職稱:“<<getprof<<endl; } void main{ Chairman c(“劉九州“,21,“廳長“,“財政廳“,“經(jīng)濟學“,“高級經(jīng)濟師“); c.disp; } 運行結果: 實驗7 多態(tài)與虛函數(shù) 一、實驗目的 1.理解多態(tài)的概念 2.掌握如何用虛函數(shù)實現(xiàn)運行時多態(tài) 3.掌握如何利用抽象類 二、實驗內(nèi)容及步驟 1. 設計一個圖形類(Shape),由它派生出三角形類(Triangle)、正方形類(Square)、圓形類(Circle),利用虛函數(shù)計算圖形面積,并在主函數(shù)中進行測試。 2. 定義一個教師類,由教師類派生出講師、副教授、

27、教授類。教師的工資分別由基本工資、課時費和津貼構成。假設講師、副教授、教授的基本工資分別為800、900、1000元,課時費分別為每小時40、45、50元,津貼分別為1300、1800、2300。定義虛函數(shù)來計算教師的工資,并通過主函數(shù)來進行驗證。 三、實驗程序和運行結果 實驗(一)程序: _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); } 運行結果: 實驗(二)程序: _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); } 運行結果: 實驗8 運算符重載 一、實驗目的 掌握C++中運算符重載的機制和運算符重載的方式; 二、實驗內(nèi)容及步驟 1.

36、 編寫一個簡單復數(shù)類Splex,要求用友元函數(shù)重載“+”、“-”運算符,用成員函數(shù)重載“=”運算符,使之能夠實現(xiàn)整數(shù)或浮點數(shù)和復數(shù)的加法和減法,并且進行測試。 2. 空間一點p的坐標為(x,y,z),其中x,y,z為整數(shù)。編寫點類Point3D,定義空間兩點之間的加”+”,減”-”運算為相應三個坐標值分別進行加、減運算,要求實現(xiàn)空間兩點之間的加”+”減”-”賦值”=”運算,空間兩點間的比較”= =”運算。要求編寫Point3D類的聲明定義和測試程序。 3. 設計一個時間類Time,包括時、分、秒等私有數(shù)據(jù)成員。重載“+”和“-”運算符以實現(xiàn)時間的加法和減法運算,并進行測試。 三、實

37、驗程序和運行結果 實驗(一)程序: _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<<“復數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<endl; s2=6.2+s1; cout<<“復數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<en

41、dl; s2=5-s1; cout<<“復數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<endl; s2=3.2-s1; cout<<“復數(shù)s2是:(“<<s2.getreal<<','<<s2.getimag<<')'<<endl; } 運行結果: 實驗(二)程序: _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; } 運行結果: 實驗(三)程序: _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; } 運行結果: 第 18 頁 共 18 頁

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!