题目要求
请编写一个抽象类Shape,包括两个纯虚函数,分别为计算面积getArea()和计算周长getPerim()。通过Shape类派生出矩形类Rectangle和圆类Circle,并计算各自的面积和周长。
测试用例具体要求:输入1表示测试矩形类,之后输入矩形长和宽。输入2表示测试圆类,之后输入圆半径。
Shape类定义如下:
class Shape { public: virtual double getArea()=0; virtual double getPerim()=0; };
裁判测试程序样例:
#include <iostream> using namespace std; const double PI=3.14; class Shape { public: virtual double getArea()=0; virtual double getPerim()=0; }; /* ------请在这里填写答案 ------*/ int main() { Shape *p; int n; double w,h,r; scanf("%d",&n); switch(n) { case 1: { cin>>w>>h; Rectangle rect(w,h); cout<<"area="<<rect.getArea()<<endl; cout<<"perim="<<rect.getPerim()<<endl; break; } case 2: { cin>>r; Circle c(r); cout<<"area="<<c.getArea()<<endl; cout<<"perim="<<c.getPerim()<<endl; break; } } return 0; }
输入样例1:
在这里给出一组输入。例如:
1
4 5
输出样例1:
在这里给出相应的输出。例如:
area=20
perim=18
输入样例2:
在这里给出一组输入。例如:
2
5
输出样例2:
在这里给出相应的输出。例如:
area=78.5
perim=31.4
解题思路
在抽象类shape中声明两个纯虚函数 getArea() 和 getPerim()。
基于 Shape 类来声明矩形类 Rectangle 和圆类 Circle,
并在这两个类中重载父类中的两个纯虚函数。
代码
// 矩形类 Rectangle 继承自 Shape 类 class Rectangle : public Shape { private: double a, b; // 长和宽 public: Rectangle(double a_, double b_) : a(a_), b(b_) {} // 构造函数 // 重载父类中的两个纯虚函数 double getArea() { return a * b; } double getPerim() { return 2 * (a + b); } }; // 圆类 Circle 继承自 Shape 类 class Circle : public Shape { private: double r; // 半径 public: Circle(double r_) : r(r_) {} // 构造函数 // 重载父类中的两个纯虚函数 double getArea() { return PI * r * r; } double getPerim() { return 2 * PI * r; } };
整体代码如下:
#include <iostream> using namespace std; const double PI = 3.14; // 抽象类 Shape,包括两个纯虚函数 class Shape { public: virtual double getArea() = 0; virtual double getPerim() = 0; }; // 矩形类 Rectangle 继承自 Shape 类 class Rectangle : public Shape { private: double a, b; // 长和宽 public: Rectangle(double a_, double b_) : a(a_), b(b_) {} // 构造函数 // 重载父类中的两个纯虚函数 double getArea() { return a * b; } double getPerim() { return 2 * (a + b); } }; // 圆类 Circle 继承自 Shape 类 class Circle : public Shape { private: double r; // 半径 public: Circle(double r_) : r(r_) {} // 构造函数 // 重载父类中的两个纯虚函数 double getArea() { return PI * r * r; } double getPerim() { return 2 * PI * r; } }; int main() { Shape *p; int n; double w, h, r; scanf("%d", &n); switch (n) { case 1: cin >> w >> h; Rectangle rect(w, h); // 创建矩形对象 p = ▭ // 指向矩形对象 break; case 2: cin >> r; Circle c(r); // 创建圆对象 p = &c; // 指向圆对象 break; } // 输出面积和周长 cout << "area=" << p->getArea() << endl; cout << "perim=" << p->getPerim() << endl; return 0; }
总结
需要注意的是:
纯虚函数没有具体的实现,只是为子类提供接口。
我是秋说,我们下次见。