当前位置:文档之家› 实验六继承性与多态性

实验六继承性与多态性

湖北工业大学工程技术学院实验报告课程名称:面向对象程序设计实验内容:实验六继承性与多态性学院:工程技术学院专业班级:姓名:学号:指导教师:实验日期:实验地点:一、实验目的1、1、了解多态性的概念。

2、2、了解虚函数的作用及使用方法。

3、3、了解纯虚函数和抽象类的概念和用法。

二、实验步骤1.设计一个类层次,其中的基类为Date,它拥有一个相关数据成员及一个虚函数print,从Date类派生ShortE、MediumDate和LongDate类,Date的print 函数使用日期格式:11-26-2015,ShortE的print函数使用日期格式:26-11-2015MediumDate的print函数使用日期格式:Nov.26,2015LongDate的print函数使用日期格式:November 26, 2015编写一个程序来测试各个类的print函数。

#include<iostream>using namespace std;class Date{protected:int year,month,day;public:Date(int y,int m,int d){year=y;month=m;day=d;}virtual void print(){cout<<month<<"-"<<day<<"-"<<year<<endl;}};class ShortE:public Date{public:ShortE(int y,int m,int d):Date(y,m,d){} void print(){cout<<day<<"-"<<month<<"-"<<year<<endl;}};class MediumDate:public Date{public:MediumDate(int y,int m,int d):Date(y,m,d){} void print(){switch(month){case 1:cout<<"Jap.";break;case 2:cout<<"Feb.";break;case 3:cout<<"Mar.";break;case 4:cout<<"Apr.";break;case 5:cout<<"May.";break;case 6:cout<<"Jun.";break;case 7:cout<<"Jul.";break;case 8:cout<<"Aug.";break;case 9:cout<<"Sep.";break;case 10:cout<<"Oct.";break;case 11:cout<<"Nov.";break;case 12:cout<<"Dec.";break;default:cout<<"error";}cout<<day<<","<<year<<endl;}};class LongDate:public Date{public:LongDate(int y,int m,int d):Date(y,m,d){} void print(){switch(month){case 1:cout<<"January.";break;case 2:cout<<"February.";break;case 3:cout<<"March.";break;case 4:cout<<"April.";break;case 5:cout<<"May.";break;case 6:cout<<"June.";break;case 7:cout<<"July.";break;case 8:cout<<"August.";break;case 9:cout<<"September.";break;case 10:cout<<"October.";break;case 11:cout<<"November.";break;case 12:cout<<"December.";break;default:cout<<"error";}cout<<day<<","<<year<<endl;}};void main(){Date d1(2015,11,26),*d;ShortE d2(2015,11,26);MediumDate d3(2015,11,26);LongDate d4(2015,11,26);d=&d1;d->print();d=&d2;d->print();d=&d3;d->print();d=&d4;d->print();}写出实验步骤、调试记录和实验结果:2、定义一个抽象类CShape,包含纯虚函数Area()(用来计算面积)。

然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。

各形状的数据由构造函数来设置。

并在主函数中求出各形状的面积之和。

编写一个完整的程序。

#include<iostream.h>#include<math.h>class CShape{public:virtual float Area()=0;};class CTriangle:public CShape{private:float a,b,c;public:float Area(){float t=(a+b+c)/2.0;return sqrt((t-a)*(t-b)*(t-c));}CTriangle(float x,float y,float z){a=x;b=y;c=z;}};class CRect:public CShape{private:float l,h;public:float Area(){return l*h;}CRect(float x,float y){l=x;h=y;}};class CCircle:public CShape{private:float r;public:float Area(){return 3.14*r*r;}CCircle(float x){r=x;}};void main(){float sum=0;CShape*p;p=new CTriangle(16,20,12);sum+=p->Area();p=new CRect(8,9);sum+=p->Area();p=new CCircle(5);sum+=p->Area();cout<<"总面积:"<<sum<<endl;}写出实验步骤、调试记录和实验结果:三、分析与总结(每个步骤10分)1、总结实验所验证的知识点。

1.虚函数的使用方法是:在基类用virtual 声明成员函数为虚函数。

这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。

在类外定义虚函数时,不必再加virtual。

2.带有纯虚函数的类称为抽象类: class 类名{ virtual 类型函数名(参数表)=0; //纯虚函数 ... } 纯虚函数纯虚函数没有函数体;最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”; 这是一个声明语句,最后应有分号。

2、写出实验后的学习体会。

这次实验,我们认识了多态性的概念,了解了虚函数的作用及使用方法,同时也知道了纯虚函数和抽象类的概念和用法四、教师评阅意见签名:日期:。

相关主题