实验3 继承和派生类的应用

2019-08-03 10:46

C++面向对象程序设计 实验指导 实验3 继承和派生类的应用 3.1实验目的

1.掌握多重继承和派生类的方法 2.掌握初始化基类成员的方法 3.掌握定义虚基类的方法 3.2实验内容与步骤 1.上机实验题一

定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两个类派生出日期和时间类。主函数完成基类和派生类的测试工作。

⑴分析

定义一个描述日期的类,构造函数完成年、月、日的初始化,包含一个重新设置日期的成员函数,一个获取日期的成员函数。该类可定义为:

class Date{ int Year,Month,Day; //分别存放年、月、日 public:

Date(int y=0, int m=0,int d=0)

{ Year= y; Month = m; Day = d; }

void SetDate(int ,int ,int ); void GetDate(char *); };

函数SetDate完成数据成员的赋初值。函数GetDate要将整数年、月、日变换成字符串后,存放到参数所指向的字符串中。把一个整数变换成字符串可通过库函数:

char * _itoa(int a , char *s, int b);

来实现,参数a为要变换的整数,b为数制的基数(如10,表示将a转换为对应的十进制的字符串),转换的结果存放到s所指向的字符串中。函数返回变换后字符串的首指针。该成员函数可以是:

void Date::GetDate(char *s) { char t[20];

实验3 继承和派生类的应用

_itoa(Year,s,10); strcat(s,\ _itoa(Month,t,10); strcat(s,t); strcat(s,\_itoa(Day,t,10); strcat(s,t);

//将年变换为字符串表示 //年、月、日之间用“/”隔开 //将月变换为字符串表示 //将年、月字符串拼接

//将年、月、日拼接成一个字符串

}

定义描述时间的类与描述日期的类类同,然后用这二个类作为基类,公有派生出描述日期和时间的类。

简化的参考程序如下:

#include #include #include class Date{ int Year,Month,Day;

//分别存放年、月、日

public: Date(int y=0, int m=0,int d=0) { Year= y; Month = m; Day = d; } void SetDate(int ,int ,int ); void GetDate(char *); };

void Date::SetDate(int y,int m,int d ) { Year= y; Month = m; Day = d; }

void Date::GetDate(char *s) { char t[20]; _itoa(Year,s,10); strcat(s,\ _itoa(Month,t,10); strcat(s,t); strcat(s,\ _itoa(Day,t,10); strcat(s,t); }

class Time { int Hours,Minutes,Seconds; public: Time(int h=0,int m=0, int s=0)

//时、分、秒

C++面向对象程序设计 实验指导 { Hours = h; Minutes = m; Seconds = s; } void SetTime(int h,int m, int s) { Hours = h; Minutes = m; Seconds = s; } void GetTime(char *); };

void Time::GetTime(char *s) {

char t[20]; _itoa(Hours,s,10); strcat(s,\ _itoa(Minutes,t,10); strcat(s,t); strcat(s,\}

class DateTime:public Date,public Time{ //公有派生 public: DateTime():Date(),Time()

{ }

DateTime(int y,int m,int d,int h,int min,int s): Date(y,m,d),Time(h,min,s){ } void GetDateTime(char *); void SetDateTime(int y,int m,int d,int h,int min,int s); };

void DateTime::GetDateTime(char *s) { char s1[100],s2[100];

GetDate(s1); GetTime(s2);

strcpy(s,\日期和时间分别是:\

strcat(s,\strcat(s,s2); }

void DateTime::SetDateTime(int y,int m,int d,int h,int min,int s) { SetDate(y,m,d); SetTime(h,min,s); }

void main(void ) { Date d1(2003,1,30); char s[200]; d1.GetDate(s); cout<<\日期是:\

Time t1(12,25,50); t1.GetTime(s);

实验3 继承和派生类的应用

cout<<\时间是:\

DateTime dt1(2003,2,4, 8,20,15); dt1.GetDateTime(s); cout<

dt1.SetDateTime(2003,12,30,23,50,20); dt1.GetDateTime(s); cout<

}

⑵上机要求

将类DateTime改为由基类Date和Time私有派生,程序能否正确编译和执行,为什么? ⑶写出实验报告。

2.上机实验题二

设计一个描述儿童、成人和老人的类,儿童分为学龄前和学龄期儿童,成人有工作,老人已退休。提取共性作为基类,并派生出满足要求的各个类及每一个类上的操作。设计一个完整的程序,并完成测试程序的正确性。

⑴分析

描述一个人的基本特性包括:姓名,出生日期,出生地。把这些基本特性定义为一个基类Base。不论学龄前还是学龄期儿童都要有监护人。为此在类Base的基础上派生出类AllChil,再把类AllChil作为基类派出学龄前和学龄期儿童的类。把类Base作为基类,分别派生出成人类和老人类。

一个供参考的部分程序为:

#include #include

class Base{

char Name[14]; int Year,Month,Day; char BothPlace[30];

//姓名

//分别存放出生年、月、日 //出生地

public:

Base( char *n, int y,int m,int d,char *bp) ; Base();

void SetDate(int ,int ,int ); void SetName(char *); void SetBothPlace(char *); void GetDate(int *,int * ,int *); void GetName(char *); void GetBothPlace(char *); void PrintBase(); };

class AllChil:public Base

//设置出生年、月、日 //设置姓名 //设置出生地

//获取出生年、月、日 //获取姓名 //获取出生地 //输出有关信息

C++面向对象程序设计 实验指导 {

char ParMa[14];

//监护人

public :

AllChil() :Base();

AllChil(char *n, int y,int m,int d,char *bp,char *pm):Base(n,y,m,d,bp); void SetParMa( char *); //设置监护人 void GetParMa( char *); //获取监护人

void PrintAllChil( ) ; };

class Men:public Base {

char *unit; int salary; char tel[20];

//输出有关信息

//单位 //工资 //电话

public:

Men( ) :Base();

Men(char *n, int y,int m,int d,char *bp,char *u,int s,char *te):Base(n,y,m,d,bp); void GetData(char *,int *,char *); //取单位,工资,电话 void SeetData(char *,int *,char *); //设置单位,工资,电话

void PrintMen();

//输出有关信息

};

class OldMen:public Base {

int salary; char tel[20]; public:

...... };

⑵上机要求

完成程序的正确性测试工作。 ⑶写出实验报告。 3.3项目选做

设计程序从学生类中派生出硕士研究生和博士研究生类。


实验3 继承和派生类的应用.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2010年省统表新组卷内目录(广东) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: