题目描述
定义一个基类Shape,有成员函数:calArea(),但什么都不做,返回0。在此基础上公有派生出Rectangle(矩形)类和Circle类,添加相应的数据成员(成员均为double型),重新定义calArea()计算对象的面积。
主函数中,分别定义一个Rectangle和Circle类对象,初始值由键盘输入。(1)通过对象调用相应的calArea(),输出结果;(2)定义Shape类对象指针,分别赋以Rectangle和Circle类的对象地址,通过指针调用calArea(),输出结果;(3)定义Shape类对象引用,以Rectangle和Circle类的对象初始化,通过引用调用calArea(),输出结果。
PI: 3.1415926
输入描述
两行
Rectangle类对象的初值
Circle类对象的初值
输出描述
通过基类对象、基类指针和基类对象引用调用之后的结果
输入样例
3 6
3
输出样例
通过Rectangle类对象调用calArea():18
通过Circle类对象调用calArea():28.2743
通过基类指针调用Rectangle类的calArea():0
通过基类指针调用Circle类的calArea():0
通过基类对象引用调用Rectangle类的calArea():0
通过基类对象引用调用Circle类的calArea():0(中文冒号)
#include <iostream>
#define PI 3.1415926
using namespace std;
class Shape
{
public:
int calArea()
{
return 0;
}
};
class Rectangle :public Shape
{
public:
Rectangle(double a, double b)
{
h = a;
w = b;
}
double calArea()
{
return h*w;
}
void output()
{
cout << "通过Rectangle类对象调用calArea():" << calArea()<<endl;
}
protected:
double h, w;
};
class Circle:public Shape
{
public:
Circle(double a)
{
r = a;
}
double calArea()
{
return r*r*PI;
}
void output()
{
cout << "通过Circle类对象调用calArea():" << calArea() << endl;
}
protected:
double r;
};
int main()
{
double h, w, r;
cin >> h >> w >> r;
Rectangle A(h,w);
Circle B(r);
Shape *p1, *p2;
Shape &q1= A, &q2=B;
p1 = &A;
p2 = &B;
A.output();
B.output();
cout << "通过基类指针调用Rectangle类的calArea():" << (*p1).calArea() << endl;
cout << "通过基类指针调用Circle类的calArea():" << (*p2).calArea() << endl;
cout << "通过基类对象引用调用Rectangle类的calArea():" << (q1).calArea() << endl;
cout << "通过基类对象引用调用Circle类的calArea():" << (q2).calArea() << endl;
return 0;
}