实验3 继承和派生类的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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];
_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: Array
Time(int h=0,int m=0, int s=0)
{ 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,":");_itoa(Seconds,t,10); strcat(s,t);
}
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,s1);
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);