实验三 多态性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

cout<<"椭圆周长:"<

}

private :

double Lradius;

double Wradius;

};

class Triangle :public Shape

{

public:

Triangle(double a,double b,double c):Shape(){ aLength=a;

bLength=b;

cLength=c;

if(a+b<=c||a+c<=b||b+c<=a)

{

cout<<"三角形两边之和需大于第三边!"<

exit(0);

}

}

Triangle(Triangle &c){

aLength=c.aLength;

bLength=c.bLength;

cLength=c.cLength;

}

double Circumference(){

return aLength+bLength+cLength;

}

double Area(){

double p;

p=(aLength+bLength+cLength)/2.0;

return sqrt(p*(p-aLength)*(p-bLength)*(p-cLength));

}

void show(){

double a,b;

a=Circumference();

b=Area();

cout<<"三角形周长:"<

}

private :

double aLength;

double bLength;

double cLength;

};

class Rectangle :public Shape

{

public:

Rectangle(double a,double b):Shape(){

Length=a;

Width=b;

}

Rectangle(Rectangle &c){

Length=c.Length;

Width=c.Width;

}

double Circumference(){

return 2*(Length+Width);

}

相关文档
最新文档