实验三 多态性
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南**大学
实验报告
课程名称面向对象程序设计名称实验三多态性
院系_信息工程学院__
班级__计科172
学生姓名_ ** __
实验三多态性
一.实验目的
本实验的目的是使学生了虚函数的作用,掌握多态的概念、编译时多态、运行时多态,掌握运算符重载和虚函数的用法。
二.实验环境
Visual C++ 6.0 及以上版本。
三.实验内容
熟悉掌握C++多态的相关知识。根据老师布置的实验题目,提前分析题目要求所需要的类,设计好解决题目要求需要的对象个数,设计解决问题需要的主函数等。题目可以从以下题目中选择一个。
1.定义一个实数类Real,类中包括一个数据成员real,构造函数、display()函数以及重载的+、-、*、/运算符。用公有继承方式声明一个复数类Complex,该类包括两个数据成员real,image,并重载Real类的函数和+、-、*、/运算符。编写一个复数四则运算计算器。
2.Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和求自身面积函数Area()。从Shape类派生出Circle类、Ellipse类、Triangle 类和Rectangle类,分别继承基类Shape的Circumference()和Area(),并增加新的成员。编写主函数,定义各派生类对象,求多派生类对象的周长之和、面积之和。
3.其它和本实验目的相符的题目,根据学生实际情况增加相应的题目,但题目难度不应低于以上两个题目。
注意:从以上题目中选择一个作为实验题目。
选择题目2
四、实验原理
1.按照题目要求分析解决问题需要的类;
2.进行类的设计并实现;
3.分析解决问题需要定义的对象及对象间的消息传递关系;
4.设计主函数实现题目要求。
五、数据结构和程序设计
实验中出现的问题以及解决方案:问题一:
改为
六、实验总结
学习使用虚函数实验动态多态性。而虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数,且在派生类中重工业新定义时,函数原型,包括返回类型、函数名、参数个数与参数类型的顺序,都必须与基类中的完全相同。此外,构造函数不能是虚函数,但析构函数可以说虚函数。
函数的重载方法有一参数个数相同,但是类型不同;二参数个数不同;三const (常量)
七、源代码
#include
#include
using namespace std;
const double PI=3.1415926;
class Shape{
public:
virtual double Circumference()=0;
virtual double Area()=0;
virtual void show(){};
};
class Circle :public Shape
{
public:
Circle(double a):Shape(){
radius=a;
}
Circle(Circle &c){
radius=c.radius;
}
double Circumference(){
return 2*PI*radius;
}
double Area(){
return PI*radius*radius;
}
void show(){
double a,b;
a=Circumference();
b=Area();
cout<<"圆周长:"< } private: double radius; }; class Ellipse :public Shape { public: Ellipse(double a,double b):Shape(){ Lradius=a; Wradius=b; } Ellipse(Ellipse &c){ Lradius=c.Lradius; Wradius=c.Wradius; } double Circumference(){ return (Wradius/Lradius)*(Lradius+Wradius); } double Area(){ return PI*Lradius*Wradius; } void show(){ double a,b; a=Circumference(); b=Area();