实验六 多态和虚函数
- 格式:doc
- 大小:32.00 KB
- 文档页数:3
实验6 多态与虚函数
[实验目的]
1、了解多态性的概念;
2、了解虚函数的用途及使用方法;
3、了解纯虚函数和抽象类的概念和用法。
[实验要求]
给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。
[实验内容]
1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。
[源程序]
#include
using namespace std;
class Shape
{
public:
virtual float area()const=0;
virtual void display()const=0;
};
class Circle:public Shape
{
public:
Circle(double a):r(a){}
virtual float area()const{return 3.14*r*r;}
virtual void display()const
{
cout<<"圆面积"<
}
private:
double r;
};
class Rectangle:public Shape
{
public:
Rectangle(double a,double b):l(a),w(b){}
virtual float area()const{return l*w;}
virtual void display()const
{
cout<<"矩形面积"<
}
private:
double l;
double w;
};
class Square:public Shape
{
public:
Square(double a):a1(a){}
virtual float area()const{return a1*a1;}
virtual void display()const
{
cout<<"正方形面积"<
}
private:
double a1;
};
int main()
{
Circle c1(5);
Rectangle r1(5,8);
Square s1(2.5);
Shape *p[3]={&c1,&r1,&s1};
int i;
double m=0.0;
for (i=0;i<3;i++)
{
p[i]->display();
m=m+p[i]->area();
}
cout<<"总面积:"< } 2、定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件(.h文件),对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数(.cpp 文件)中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。 3、要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container 为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。 [习题] 1、创建字符串类string,重载运算符+,使能实现两个字符串的连接;重载运算符=, 使能实现字符串赋值。重载运算符<、> 与==,使能实现字符串的比较运算。 重载运算符+=,使能实现字符串的追加赋值。 2、定义一个日期类,含年、月、日3个int型成员变量,实现运算符+,- 的重载。 其中,运算符+ 实现日期加上一个天数,得到新日期;运算符- 实现日期减去一个天数,得到新日期。 3、定义以一个复数类,实现运算符+,-,*,/,=,== 的重载。