面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告
《面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告》由會員分享,可在線閱讀,更多相關(guān)《面向?qū)ο蟪绦蛟O(shè)計(C++)實驗報告(25頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、C++課程設(shè)計 面向?qū)ο蟪绦蛟O(shè)計 (C++) 實驗報告 姓名:劉九州 學(xué)院:數(shù)學(xué)與計算機(jī)學(xué)院 班級:10級計算機(jī)大類三班 學(xué)號:100511314 實驗5 單繼承 一、實驗?zāi)康? 1.掌握派生的類別與方式; 2.了解派生類中如何使用基類的成員、基類成員在派生類中的訪問控制; 3. 掌握繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用過程。 二、實驗內(nèi)容及步驟 1. 給出一個Document類,從Document派生出Book類,增加PageCount變
2、量。在主函數(shù)中進(jìn)行測試,創(chuàng)建Book類對象并進(jìn)行初始化,輸出書名和頁數(shù)。 2. 設(shè)計一個單基繼承的類層次程序,利用Person類派生出Student類,增加屬性xh(學(xué)號),Person類中至少有姓名、年齡等數(shù)據(jù)成員,成員函數(shù)中構(gòu)造函數(shù)對其初始化,析構(gòu)函數(shù)釋放相應(yīng)存儲單元,輸出函數(shù)輸出其數(shù)據(jù)成員的值,其它成員函數(shù)根據(jù)需要添加,在主函數(shù)中進(jìn)行測試。 3. 設(shè)計一個人員類person和一個日期類date,由人員類派生出學(xué)生類student和教師類professor,學(xué)生類和教師類的數(shù)據(jù)成員birthday為日期類。在主函數(shù)中進(jìn)行測試。 三、實驗源程序和運行結(jié)果 實驗(一
3、)源程序:
#include
4、ument(){
delete []Name;
}
void Document::PrintNameOf()
{
cout<
5、 cout<<"請輸入書的頁數(shù):"<
6、name=c; age=a; } ~person(){} 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 student:public person { public: student(){ xh=0; } stu
7、dent(int d){ xh=d; } student(string c,int a,int d):person(c,a){ xh=d; } ~student(){} void 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<<"
8、請輸入學(xué)生的學(xué)號:\n";
int d;
cin>>d;
student n(c,a,d);
cout<<"請輸入學(xué)生的姓名為: "<
9、; age=0; } person(string c,int a){ name=c; age=a; } ~person(){} 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: dat
10、e(){ year=2011; month=12; day=17; } ~date(){} date(int y,int m,int d){ year=y; month=m; day=d; } int getyear(){ return year; } int getmonth(){ return month; } int getday(){ return day; } private: int year; int month; int day; }; class student:p
11、ublic person{
public:
student(){
// birthday.date();
}
student(int y,int m,int d):birthday(y,m,d)
{
}
~student(){}
void getbirthday(){
cout<<"學(xué)生的生日為:\n";
cout< 12、;
class teacher:public person{
public:
teacher(){
// birthday.date();
}
teacher(int y,int m,int d):birthday(y,m,d)
{
//birthday.date(y,m,d);
}
~teacher(){}
void getbirthday(){
cout<<"老師的生日為:\n";
cout< 13、< 14、
3.掌握虛基類的定義及使用。
二、實驗內(nèi)容及步驟
1. 定義一個學(xué)生類Student和教師類Teacher,學(xué)生類有姓名、學(xué)號、私有數(shù)據(jù)成員,教師類有姓名、工作證號、職稱、課程、周學(xué)時數(shù)。再定義一個助教類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派生出工程師 15、類Engineer,包含職務(wù)和專業(yè)私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù);再由Leader和Engineer類派生出主任工程師類Chairman。并采用相關(guān)數(shù)據(jù)進(jìn)行測試。
三、實驗源程序和運行結(jié)果
實驗(一)源程序:
#include 16、
char t_name[20];
int id_t;
char position[30];
char lesson[30];
int hour;
public:
Teacher(char *pos,int 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);
voi 17、d ShowInfo();
};
Student::Student(char *name,int id){
strcpy(s_name,name);
id_s=id;
}
void Student::ShowInfo(){
cout<<"姓名:"< 18、,int h){
strcpy(t_name,name);
strcpy(lesson,less);
strcpy(position,pos);
id_t=id;
hour=h;
}
void Teacher::ShowInfo(){
cout<<"姓名:"< 19、),Teacher(less,h){}
void TA::ShowInfo(){
Student::ShowInfo();
cout<<"課程:"< 20、 name[30];
int 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 set 21、dep(char *dp);
char *getjob();
char *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();
};
cla 22、ss Chairman:public Leader,public Engineer{ //主任工程師類
public:
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;
23、}
char *Person::getname(){
return name;
}
int Person::getage(){
return age;
}
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::ge 24、tjob(){
return job;
}
char *Leader::getdep(){
return dep;
}
Engineer::Engineer(char *maj,char *pf):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 25、::getmajor(){
return major;
}
char *Engineer::getprof(){
return prof;
}
Chairman::Chairman(char *n,int a,char *jb,char *dp,char *maj,char *pf):Person(n,a),Leader(jb,dp),Engineer(maj,pf){}
void Chairman::disp(){
cout<<"姓名:"< 26、getdep()<<\t<<"專業(yè):"< 27、驗內(nèi)容及步驟
1. 設(shè)計一個圖形類(Shape),由它派生出三角形類(Triangle)、正方形類(Square)、圓形類(Circle),利用虛函數(shù)計算圖形面積,并在主函數(shù)中進(jìn)行測試。
2. 定義一個教師類,由教師類派生出講師、副教授、教授類。教師的工資分別由基本工資、課時費和津貼構(gòu)成。假設(shè)講師、副教授、教授的基本工資分別為800、900、1000元,課時費分別為每小時40、45、50元,津貼分別為1300、1800、2300。定義虛函數(shù)來計算教師的工資,并通過主函數(shù)來進(jìn)行驗證。
三、實驗源程序和運行結(jié)果
實驗(一)源程序:
#include 28、mespace std;
class Shape
{
public:
virtual float area()
{return 0.0;}
};
class Triangle:public Shape
{
public:
Triangle()
{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 29、 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()
{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 30、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;}
float getRadius()
{return radius;}
float area()
{return 3.14159*radius*radius;}
protected:
float radius; 31、
};
void displayShapeArea(Shape *p)
{
cout<<"圖形面積為:"< 32、(二)源程序:
#include 33、f(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.0;}
AssociateProfessor(float WorkHours)
{
th 34、is->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:
Professor()
{WorkHours=1.0;} 35、
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)
{
c 36、out<<"工資為:"< 37、. 編寫一個簡單復(fù)數(shù)類Scomplex,要求用友元函數(shù)重載“+”、“-”運算符,用成員函數(shù)重載“=”運算符,使之能夠?qū)崿F(xiàn)整數(shù)或浮點數(shù)和復(fù)數(shù)的加法和減法,并且進(jìn)行測試。
2. 空間一點p的坐標(biāo)為(x,y,z),其中x,y,z為整數(shù)。編寫點類Point3D,定義空間兩點之間的加”+”,減”-”運算為相應(yīng)三個坐標(biāo)值分別進(jìn)行加、減運算,要求實現(xiàn)空間兩點之間的加”+”減”-”賦值”=”運算,空間兩點間的比較”= =”運算。要求編寫Point3D類的聲明定義和測試程序。
3. 設(shè)計一個時間類Time,包括時、分、秒等私有數(shù)據(jù)成員。重載“+”和“-”運算符以實現(xiàn)時間的加法和減法運算,并進(jìn)行測試 38、。
三、實驗源程序和運行結(jié)果
實驗(一)源程序:
#include 39、
{
return real;
}
double getimag()
{
return imag;
}
friend Scomplex operator+(int i,Scomplex s);
friend Scomplex operator+(double d,Scomplex s);
friend Scomplex operator-(int i,Scomplex s);
friend Scomplex operator-(double d,Scomplex s);
};
Scomplex& Scomplex::operato 40、r =(Scomplex s){
if(this==&s)
return *this;
real=s.real;
imag=s.imag;
return *this;
}
Scomplex operator+(int i,Scomplex s){
Scomplex t;
t.real=i+s.real;
t.imag=s.imag;
return t;
}
Scomplex operator+(double d,Scomplex s){
Scomplex t;
t.real=d+s.real;
t.imag=s.imag;
ret 41、urn t;
}
Scomplex operator-(int i,Scomplex s){
Scomplex t;
t.real=i-s.real;
t.imag=s.imag;
return t;
}
Scomplex operator-(double d,Scomplex s){
Scomplex t;
t.real=d-s.real;
t.imag=s.imag;
return t;
}
void main(){
Scomplex s1(3.4,5.2),s2;
s2=1+s1;
cout<<"復(fù)數(shù)s2是:("< 42、2.getreal()<<,< 43、am.h>
class Point3D
{
public:
Point3D()
{
x=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 +(Poin 44、t3D p);
Point3D operator -(Point3D p);
bool operator ==(Point3D p);
private:
int 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+ 45、p.y;
t.z=z+p.z;
return t;
}
Point3D Point3D::operator -(Point3D p)
{
Point3D t;
t.x=x-p.x;
t.y=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 46、),p3,p4;
p3=p1+p2;
cout<<"兩點相加后為:
("< 47、
class Time
{
public:
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 getMinu 48、te()
{return minute;}
int getSecond()
{return second;}
void displayTime()
{
cout< 49、=second+t.getSecond();
if(ss>60){
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 borro 50、w,hh,mm,ss;
ss=second-t.getSecond();
if(ss<0){
ss+=60;
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é)果:
- 溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。