




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四 继承 多态一、 实验目的(1)了解继承在面向对象程序设计中的重要作用。(2)进一步理解继承与派生。(3)掌握通过继承派生出一个新的类的方法。(4)了解虚基类的作用和用法。二、 实验设计1. 实验任务一(1)将C+面向对象程序设计第五章例题5.1的程序片段补充和改写成一个完整的正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。2. 实验任务二(2)将C+面向对象程序设计第五章例题5.3的程序修改,补充和改写成一个完整的正确的程序,用保护继承方式。在程序中应包括输入数据的函数。3. 实验任务三(3)修改第二题程序,改为公用继承方式。上机调试程序,使之能正确运行并得到正确结果。4. 实验任务四分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:(1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。(2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。(3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。(4)在类体中声明成员函数,在类外定义成员函数。(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。5. 实验任务五事先编写好程序,上机调试和运行程序,分析结果。(1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行;(2)该任务采用什么方案实现:如程序的结构,算法思想,需要的输入、期望的输出,等;(3)完成该任务的需要的主要步骤;6. 实验任务6事先编写好程序,上机调试和运行程序,分析结果。(1) 在C+面向对象程序设计第6章例6.3的基础上作以下修改,并作必要的讨论。 把构造函数修改为带参数的函数,在建立对象时初始化。 先不将析构函数声明为virtual,在main函数中另设一个指向Circle类对象的指针变量,使它指向gradl。运行程序,分析结果。不作第点的修改而将析构函数声明为virtual,运行程序,分析结果。(2)该任务采用什么方案实现:如程序的结构,算法思想,需要的输入、期望的输出,等;(3)完成该任务的需要的主要步骤;7. 实验任务7事先编写好程序,上机调试和运行程序,分析结果。(1) 声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。(2)该任务采用什么方案实现:如程序的结构,算法思想,需要的输入、期望的输出,等; (3)完成该任务的需要的主要步骤;三、 实验记录及结果1. 实验任务一#include #include namespace std;class Studentpublic: void get_value() cinnumnamesex; void display() coutnum:numendl; coutname:numendl coutsex:numageaddr; void display_1() coutage:ageendl; coutaddress:addrendl; private: int age; char addr30; ; int main() Student1 stud1; stud1.get_value_1(); stud1.display(); stud1.display_1(); return 0; 2. 实验任务二#include #include namespace std;class Studentpublic: void get_value() cinnumnamesex; void display() coutnum:numendl; coutname:numendl coutsex:numageaddr; void display_1() coutage:ageendl; coutaddress:addrendl; private: int age; char addr30; ; int main() Student1 stud1; stud1.get_value_1(); stud1.display_1(); return 0; 3. 试验任务三#include using namespace std;class Studentpublic: void get_value(); void display(); protected: int num; char name10; char sex;void Student:get_value()cinnumnamesex; void Student:display() coutnum:numendl; coutname:nameendl; coutsex:sexageaddr; void Student1:display1() coutnum:numendl; coutname:nameendl; coutsex:sexendl; coutage:ageendl; coutaddress:addrendl; int main() Student1 stud1; stud1.get_value_1(); stud1.display1(); return 0; 4. 实验任务四#include using namespace std; /定义抽象基类Shape class Shape public: virtual double area() const =0; /纯虚函数 ; /定义Circle类 class Circle:public Shape public: Circle(double r):radius(r) /结构函数 virtual double area() const return 3.14159*radius*radius; /定义虚函数 protected: double radius; /半径 ; /定义Rectangle类 class Rectangle:public Shape public: Rectangle(double w,double h):width(w),height(h) /结构函数 virtual double area() const return width*height; /定义虚函数 protected: double width,height; /宽与高 ; class Triangle:public Shape public: Triangle(double w,double h):width(w),height(h) /结构函数 virtual double area() const return 0.5*width*height; /定义虚函数 protected: double width,height; /宽与高 ; /输出面积的函数 void printArea(const Shape &s) couts.area()endl; /输出s的面积 int main() Circle circle(12.6); /建立Circle类对象circle coutarea of circle =; printArea(circle); /输出circle的面积 Rectangle rectangle(4.5,8.4); /建立Rectangle类对象rectangle coutarea of rectangle =; printArea(rectangle); /输出rectangle的面积 Triangle triangle(4.5,8.4); /建立Triangle类对象 coutarea of triangle =; printArea(triangle); /输出triangle的面积 return 0; 5. 实验任务五#include#include#definePI3.1415926usingnamespacestd;classPoint/定义坐标点类public:Point()x=0;y=0;Point();Point(doublex0,doubley0)x=x0;y=y0;doublesetxy(doublex0,doubley0)x=x0;y=y0;doublegetx()returnx;doublegety()returny;friendostream&operator(ostream&,Point&);protected:doublex,y;/点的横坐标和纵坐标;classCircle:publicPointpublic:Circle()r=0;Circle(doublex,doubley,doubler);Circle();doublesetr(doubler0)r=r0;doublegetr()returnr;friendostream&operator(ostream&,Circle&);protected:doubler;classCylinder:publicCirclepublic:Cylinder();Cylinder(doublex,doubley,doubler,doubleh);doubleseth(doubleh0)height=h0;doublegeth()returnheight;doublearea();doublevolume();friendostream&operator(ostream&,Cylinder&);protected:doubleheight;Circle:Circle(doublex,doubley,doubler0):Point(x,y)r=r0;Cylinder:Cylinder(doublex,doubley,doubler,doubleh):Circle(x,y,r)height=h;ostream&operator(ostream&output,Point&c)outputc.xc.yendl;returnoutput;ostream&operator(ostream&output,Circle&c)outputc.rendl;returnoutput;ostream&operator(ostream&output,Cylinder&c)outputc.area()c.volume()endl;returnoutput;Point:Point()Circle:Circle()Cylinder:Cylinder()doubleCylinder:area()doubles;s=2*PI*r*r+2*PI*2;returns;doubleCylinder:volume()doublev;v=PI*r*r*height;returnv;intmain()Cylinderc1(2,2,2,2);cout圆柱的表面积:c1.area();cout圆柱的体积:c1.volume();system(pause);return0;6. 实验任务六源程序:#include using namespace std; class Point public: Point(float a,float b):x(a),y(b) Point() coutexecuting Point destructorendl; private: float x; float y; ; class Circle:public Point public: Circle(float a,float b,float r):Point(a,b),radius(r) Circle() coutexecuting Circle destructorendl; private: float radius; ; int main() Point *p=new Circle(2.5,1.8,4.5); delete p; return 0; 源程序:#include using namespace std; class Point public: Point(float a,float b):x(a),y(b) Point() coutexecuting Point destructorendl; private: float x; float y; ; class Circle:public Point public: Circle(int a,int b,int r):Point(a,b),radius(r) Circle() coutexecuting Circle destructorendl; private: float radius; ; int main() Point *p=new Circle(2.5,1.8,4.5); Circle *pt=new Circle(2.5,1.8,4.5); delete pt; return 0; 源程序:#include using namespace std; class Point public: Point(float a,float b):x(a),y(b) virtual Point() coutexecuting Point destructorendl; private: float x; float y; ; class Circle:public Point public: Circle(float a,float b,float r):Point(a,b),radius(r) virtual Circle() coutexecuting Circle destructorendl; private: float radius; ; int main() Point *p=new Circle(2.5,1.8,4.5); delete p; 7. 实验任务七#include using namespace std; /定义抽象基类Shape class Shape public: virtual double area() const =0; /纯虚函数 ; /定义Circle类 class Circle:public Shape public: Circle(double r):radius(r) /结构函数 virtual double area() const return 3.14159*radius*radius; /定义虚函数 protected: double radius; /半径 ; /定义Rectangle类 class Rectangle:public Shape public: Rectangle(double w,d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年本科生综合素质考核测试卷及答案
- 韩语topik考试历年真题及答案新课标
- 10万千瓦光热项目节能评估报告
- 2025年国家能源集团面试题及参考答案
- 2025年财政管理知识竞赛题库及答案
- 2025年游艇安全驾驶员培训题库(含答案)
- 2025年交通安全宣传周知识竞赛考试题库及答案(含各题型)
- 2025年度曲靖市专业技术人员继续教育公需科目考试题库(附答案)
- 2025年大学《建筑结构检测与鉴定》考试题库及答案
- 高三试卷:河南天一大联考2024年高二11月期中物理答案
- 页人音版三年级音乐上册音乐教案(2025-2026学年)
- 员工应急救护知识培训课件
- 2025昆明中北交通旅游(集团)有限责任公司驾驶员招聘(60人)考试参考题库及答案解析
- 2026中国航空工业集团金航数码校园招聘备考考试题库附答案解析
- 健康教育培训师资队伍建设方案
- 二类医疗器械零售经营备案质量管理制度
- 2025年医技三基考试试题及答案
- 英语A级常用词汇
- 气管切开非机械通气患者气道护理团体标准课件
- GB/T 10752-2005船用钢管对焊接头
- 新疆公路工程建设标准化手册(303编制详细)
评论
0/150
提交评论