《C++语言基础》实践项目——继承与派生
来源:互联网 发布:超链接怎么调用js函数 编辑:程序博客网 时间:2024/05/22 23:52
返回:贺老师课程教学链接
【项目0 - 是春哥啊】
请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
Name: 春哥
Grade: 19
请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
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;}[参考解答]
【项目1 - 存储班长信息的学生类】
class Stu //声明基类{public: Stu(int n, string nam ); //基类构造函数 void display( ); //成员函数,输出基类数据成员protected: //(*)访问权限为保护型的数据成员 int num; //学生学号 string name; //学生姓名};class StuDetail: public Stu //声明派生类StuDetail{public: //学生nam,学号n,a岁,家住ad,他的班长是nam1,学号n1 StuDetail(int n, string nam,int a, string ad,int n1, string nam1); //派生类构造函数 void show( ); //成员函数,输出学生的信息 void show_monitor( ); //成员函数,输出班长信息private: Stu monitor; //学生所在班的班长,班长是学生,是Stu类的成员 int age; //学生年龄 string addr; //学生的住址};int main( ){ //学生王力,10010号,19岁,家住上海的北京路,他的班长是李孙,学号10001 StuDetail s(10010,"Wang-li",19,"115 Beijing Road,Shanghai",10001,"Li-sun"); s.show( ); //输出学生信息 s.show_monitor(); //输出班长信息 return 0;}(1)上面是声明好的类及测试函数,请完成类中成员函数的定义,使运行结果如图所示。
(2)将Stu类的数据成员的访问权限改为private,你的程序是否能完成要求的功能?如果不行,请修改程序。请不要修改给出的代码,只能修改自己写的代码。
[参考解答]
【项目2 - 职员有薪水了】
(1)定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。要求派生类CEmployee的构造函数显示调用基类CPerson的构造函数,并为派生类CEmployee定义析构函数,定义输出信息的函数。
class CPerson{protected: string m_szName; string m_szId; int m_nSex;//0:women,1:man int 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:man int 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 - 类族的设计】
按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。
要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。
(提示:此任务可以分为三个子任务分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。——这种方法适用于做任何的项目)
[参考解答]
0 0
- 《C++语言基础》实践项目——继承与派生
- C++基础——继承与派生
- 《C++语言基础》实践项目——多重继承
- C语言中 继承与派生
- 《C++语言基础》程序阅读——继承和派生
- C++: 继承与派生
- 继承与派生(C++)
- C++:继承与派生
- 实训C++语言设计——继承与派生
- 实训C++语言设计——继承与派生
- C++语言(八)——继承与派生
- 【c++语言基础】浅析C++继承与派生
- 继承与派生——多继承
- 继承与派生——虚继承
- C/C++——继承和派生
- C++_继承与派生
- C++_继承与派生
- C++_继承与派生
- java 指定打印机 进行打印
- 线程与进程
- EXT.NET 后台取GridPanel全部行
- uva 10054 The Necklace 欧拉回路
- 关于libgdx获取绘制的字符串宽度
- 《C++语言基础》实践项目——继承与派生
- C++实践参考——是春哥啊
- Redis
- 史上最简单的软件破解——5行脚本代码完美破解99%的过期软件
- 一张二维码分发APP的思路
- 二、观察者模式/订阅者模式
- mule jmx远程监控
- 通过Thread配置定时器
- tcp ip通信