实验10 继承和多态
【实验目的】
1掌握掌握多重继承和派生类的方法 ????2.掌握初始化基类成员的方法 ??? 3.掌握定义虚基类的方法
【实验内容】
⒈定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两
个类派生出日期和时间类。主函数完成基类和派生类的测试工作。
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
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)
{ 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<<"日期是:"<<s<<'\n';
Time t1(12,25,50);
t1.GetTime(s);
cout<<"时间是:"<<s<<'\n';
DateTime dt1(2003,2,4, 8,20,15);
dt1.GetDateTime(s);
cout<<s<<'\n';
dt1.SetDateTime(2003,12,30,23,50,20);
dt1.GetDateTime(s);
cout<<s<<'\n';
}
⒉设计一个描述儿童、成人和老人的类,儿童分为学龄前和学龄期儿童,成人有工作,老人已退休。提取共性作为基类,并派生出满足要求的各个类及每一个类上的操作。设计一个完整的程序,并完成测试程序的正确性。
#include <iostream.h>
#include <string.h>
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
{
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:
......
};
......