2015级C++第10、11周补充实践项目 继承和派生

阅读: 评论:0

2015级C++第10、11周补充实践项目 继承和派生

2015级C++第10、11周补充实践项目 继承和派生

【项目0 - 是春哥啊】参考解答
请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
Name: 春哥
Grade: 19

#include <iostream>
#include <cstring>
using namespace std;
class Person{
public:Person(char* s){strcpy(name,s);}void display( ){cout<<"Name: "<<name<<endl;}
private:char name [20];
};
class Student: ___________//(1)
{
public:Student(char* s, int g):__________ // (2){grade=g;}void display1( ) {_________;   //  (3)cout<<"Grade: "<<grade<<endl;}
private:int grade;
};
int main( )
{Student s("春哥",19);___________;       //  (4)return 0;
}

【项目2 - 职员有薪水了】参考解答
(1)定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。要求派生类CEmployee的构造函数显示调用基类CPerson的构造函数,并为派生类CEmployee定义析构函数,定义输出信息的函数。

class CPerson
{
protected:string m_szName;string m_szId;int m_nSex;//0:women,1:manint m_nAge;
public:CPerson(string name,string id,int sex,int age);void Show1();~CPerson();
};class CEmployee:public CPerson
{
private:string m_szDepartment;double m_Salary;
public:CEmployee(string name,string id,int sex,int age,string department,double salary);void Show2();~CEmployee();
};int main()
{string name,id,department;int sex,age;double salary;cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:n";cin>>name>>id>>sex>>age>>department>>salary;CEmployee employee1(name,id,sex,age,department,salary);employee1.Show2();return 0;
}

下面的运行结果供参考:

(2)字符串除了用C++扩充的string类型外,按C语言的传统,还可以用char 表示。请将类声明中的string全部改为char 后,重新写一遍程序(此时的区别是,类中有指针成员,构造和析构函数需要考虑深复制的问题了。)

class CPerson
{
protected:char *m_szName;char *m_szId;int m_nSex;//0:women,1:manint m_nAge;
public:CPerson(char *name,char *id,int sex,int age);void Show1();~CPerson();
};
class CEmployee:public CPerson
{
private:char *m_szDepartment;float m_Salary;
public:CEmployee(char *name,char *id,int sex,int age,char *department,float salary);void Show2();~CEmployee();
};
int main()
{char name[10],id[19],department[10];int sex,age;float salary;cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:n";cin>>name>>id>>sex>>age>>department>>salary;CEmployee employee1(name,id,sex,age,department,salary);employee1.Show2();return 0;
}

【项目3 - 点类派生直线类】参考解答
定义点类Point,并以点类为基类,派生出直线类Line,从基类中继承的点的信息表示直线的中点。请阅读下面的代码,并将缺少的部分写出来。

#include<iostream>
#include<Cmath>
using namespace std;
class Point //定义坐标点类
{
public:Point():x(0),y(0) {};Point(double x0, double y0):x(x0), y(y0) {};void PrintPoint(); //输出点的信息
protected:double x,y;   //点的横坐标和纵坐标
};
void Point::PrintPoint()
{cout<<"Point: ("<<x<<","<<y<<")";    //输出点
}
class Line: public Point   //利用坐标点类定义直线类, 其基类的数据成员表示直线的中点
{
public:Line(Point pts, Point pte); //构造函数,用初始化直线的两个端点及由基类数据成员描述的中点double Length();    //计算并返回直线的长度void PrintLine();   //输出直线的两个端点和直线长度
private:class Point pts,pte;   //直线的两个端点,从Point类继承的数据成员表示直线的中点
};int main()
{Point ps(-2,5),pe(7,9);Line l(ps,pe);cout<<"About the Line: "<<endl;l.PrintLine();  //输出直线l的信息:两端点及长度cout<<"The middle point of Line is: ";l.PrintPoint(); //输出直线l中点的信息return 0;
}

程序运行参考图:

【项目4】日期时间类 参考解答
  定义一个日期类Date,数据成员包括年、月、日,SetDate(int y,int m,int d)和PrintDate()函数分别用于设置日期和显示日期;再定义一个时间类Time,数据成员包括时、分、秒,SetTime(int h,int m,int s)和PrintTime()函数分别用于设置时间和显示时间,在此基础上再定义一个日期时间类TimeDate,充分利用已有的两个类中提供的方法,实现日期和时间的设置和显示。
  请实现类TimeDate,下面是用于测试的主函数及参考运行结果。
  

int main()
{TimeDate dt_a,dt_b(2010,4,16,9,30,0);cout<<"dt_a: ";dt_a.PrintDate_Time();cout<<endl;cout<<"dt_b: ";dt_b.PrintDate_Time();dt_a.SetTime(20,00,00);dt_a.SetDate(2008,8,7);cout<<endl;cout<<"dt_after uptate: ";dt_a.PrintDate_Time();return 0;
}

本文发布于:2024-01-29 06:58:17,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648270213519.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:项目
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23