2013级C++第11周(春)项目——通过继承拥有基类的资源
来源:互联网 发布:手机浏览器导航页 知乎 编辑:程序博客网 时间:2024/05/16 10:55
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接
(注:本课资料由第9周直接到第11周,因为第10周是我校春假期,全校休课。春假,实际是五一、清明、端午打包一起休息,这亲戚的做法对按周安排活动的学校更好一些。)
第一部分 程序阅读
程序阅读1:
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
(2)再记录运行结果:
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
(3)如果两者有差异,再读程序给出解释:_____________________________________________。
(4)观察基类A中成员的访问权限制以及派生类B中对这些成员的访问方法。
程序阅读1:
#include<iostream>using namespace std;class A{private: int x;protected: int y;public: int z; A(int a,int b,int c) { x=a; y=b; z=c; } int Getx() { return x; } int Gety() { return y; } void ShowA() { cout<< "x="<<x<<'\t'; cout<<"y="<<y<<'\t'; cout<<"z="<<z<<'\n'; }};class B:public A{private: int m,n;public: B(int a,int b,int c,int d,int e):A(a,b,c) { m=d; n=e; } void Show() { cout<<"m="<<m<<'\t'<<"n="<<n<<'\n'; cout<<"x="<<Getx()<<'\t'; cout<<"y="<<y<<'\t'<<"z="<<z<<'\n'; } int Sum() { return (Getx()+y+z+m+n); }};int main(){ B b1(1,2,3,4,5); b1.ShowA(); b1.Show(); cout<< "Sum="<<b1.Sum()<<'\n'; cout<<"x="<<b1.Getx()<<'\t'; cout << "y=" <<b1.Gety()<<'\t'; cout << "z="<<b1.z<<'\n'; return 0;}(1)先阅读程序,写出你预想的运行结果:
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
(2)再记录运行结果:
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
(3)如果两者有差异,再读程序给出解释:_____________________________________________。
(4)观察基类A中成员的访问权限制以及派生类B中对这些成员的访问方法。
程序阅读2:
(2)将Whole类的构造函数(见注释//问题2)改为下面形式,请解释出现的警告信息。
第2部分 项目
【项目1 - 存储班长信息的学生类】
(2)将Stu类的数据成员的访问权限改为private,你的程序是否能完成要求的功能?如果不行,请修改程序。请不要修改给出的代码,只能修改自己写的代码。
【项目2 - 职员有薪水了】定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。要求派生类CEmployee的构造函数显示调用基类CPerson的构造函数,并为派生类CEmployee定义析构函数,定义输出信息的函数。
#include <iostream>using namespace std;class Part //部件类{public: Part(); Part(int i); ~Part();private: int val;};Part::Part(){ val=0; cout<<"调用Part的默认构造函数:"<<val<<endl;}Part::Part(int i){ val=i; cout<<"调用Part的构造函数: "<<val<<endl;}Part::~Part(){ cout<<"调用Part的析构函数: "<<val<<endl;}class Whole: public Part{public: Whole(); Whole(int,int,int,int); ~Whole();private: Part one; Part two; int data;};Whole::Whole(){ data=0; cout<<"调用whole的默认构造函数: "<<data<<endl;}Whole::Whole(int p, int i,int j,int k): Part(p),one(j),two(i),data(k) //问题2{ cout<<"调用whole的构造函数: "<<data<<endl;}Whole::~Whole(){ cout<<"调用whole的析构函数: "<<data<<endl;}void f(){ Whole w1; Whole w2(1,2,3,4);}int main(){ f(); return 0;}(1)先分析程序的执行结果,在上机时运行程序进行对照,再通过单步执行跟踪程序的运行,达到理解基类、派生类中构造函数、析构函数执行过程的目的。
(2)将Whole类的构造函数(见注释//问题2)改为下面形式,请解释出现的警告信息。
Whole::Whole(int p, int i,int j,int k): Part(p),two(i),one(j),data(k) //问题2
第2部分 项目
【项目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 - 职员有薪水了】定义一个名为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: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 - 类族的设计】按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。
要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。
(提示:此任务可以分为三个子任务分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。——这种方法适用于做任何的项目)
================= 迂者 贺利坚 CSDN博客专栏=================|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==||== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==||== 我写的书——《逆袭大学——传给IT学子的正能量》 ==|===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
0 0
- 2013级C++第11周(春)项目——通过继承拥有基类的资源
- 2013级C++第11周(春)项目——通过继承拥有基类的资源 【项目1 - 存储班长信息的学生类】
- 第11周 通过继承拥有基类的资源 程序阅读题的启示
- 第十一周--通过继承拥有基类的资源
- 2013级C++第12周(春)项目——成员的访问属性、多重继承
- 2013级C++第12周(春)项目——成员的访问属性、多重继承【 第2部分 实践项目】
- 2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发
- 2013级C++第12周(春)项目——成员的访问属性、多重继承 【项目2 - 教师兼干部类】
- 目前拥有的资源
- 目前拥有的资源
- C++第11周mooc在线测评—第11周 类的继承
- C++第12周(春)项目1 - 长颈鹿类对动物类的继承
- 第11周 项目一1.1 班长和学生的信息 对类进行继承
- 第11周-继承与派生-项目2-存储班长信息的学生类(一)
- 第11周-继承与派生-项目二-储存班长信息的学生类(二)
- 第11周-继承和派生-项目5-类族的设计
- C++第10/11周项目 继承与派生 【项目1 - 点-圆-圆柱类族的设计】(复习新版)
- C++第10/11周项目 继承与派生 【项目2 - 存储班长信息的学生类】(复习新版)
- 目前有哪些操作系统
- Centos 中 yum 安装或者卸载软件
- 你不知道的事。
- Fiind用法
- leetcode刷题14:word break
- 2013级C++第11周(春)项目——通过继承拥有基类的资源
- Codechef Racing Horses题解
- WPF后台代码中应用样式资源
- 第六章作业
- Oracle 修改用户名/密码
- spring jar包下载网址
- 在Linux下用Smbmount命令挂载
- View, ViewGroup, widget, LinearLayout等layout
- nginx代理双域名,同一个IP地址的服务器实现两个域名配置