1形状类虚函数(10分)
题目内容:
定义SHAPE类,表示几何图形,x,y位置坐标为其私有数据成员,double;成员函数有:默认构造设置位置坐标为(0,0);两参数构造函数设置x,y;set()函数设置x,y坐标;area()返回面积,虚函数,返回0。成员函数均为公有。
定义派生类——圆类CIRCLE,继承上面的SHAPE类,增加数据成员radius表示半径,double,私有。成员函数有:默认构造函数,设置圆心半径均为0;三参数构造函数初始化圆心和半径;set()设置圆心和半径;area()返回圆的面积,pai取3.14。
编写主程序,(1)定义基类对象sp,初始化位置为(1,2);定义CIRCLE类对象c,初始化位置、半径为(3,4,5);定义SHAPE指针p,定义SHAPE类型的c的引用sp2。p指向sp对象,计算并显示面积;p指向派生类对象c,计算并显示面积;通过引用sp2计算并显示面积。主函数如下:
输入:无
输出:固定值
0
78.5
78.5
样例1输入:
样例1输出:
0
78.5
78.5
【注意】本题的结果不是问题,关键是使用虚函数,并且观察和理解基类指针指向派生类对象时访问的是哪个成员函数;通过基类对派生类的引用访问的是哪个成员函数。下面提供了完整源程序,完成后,试试在类中去掉virtual看运行结果。
参考程序如下:
时间限制:500ms内存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
class SHAPE {
double x, y;
public:SHAPE(int a, int b) {
x = a, y = b;
}
SHAPE() {
x = 0, y = 0; }
void set(int a, int b) {
x = a, y = b;
}
virtual double area() {
return 0;
}
};
class CIRCLE:public SHAPE {
double radius=0;
public:
CIRCLE() {
radius = 0;
SHAPE(0, 0);
}
CIRCLE(int a, int b, int r) {
radius = r;
SHAPE(a, b);
}
void set(int a, int b, int r) {
SHAPE::set(a, b);
radius = r;
}
double area() {
return 3.14*radius*radius;
}
};
int main() {
SHAPE sp(1