声明一个Shape抽象类,在此基础上派生出矩形Rectangle和圆Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。完成类的设计,其中PI取3.14159。 主程序如下(不能修改): int main() { double radius; //圆半径 double a,b; //矩形长和宽 cin >> radius >> a >> b; Circle c(radius); Rectangle rect(a, b); Shape* pShapeArray[] = {&c, &rect}; for (int i = 0; i < 2; i++) { cout << "perimeter:" << pShapeArray[i]->GetPerim( ) << endl; cout << "area:" << pShapeArray[i]->GetArea() << endl; } return 0; }
时间: 2024-01-07 12:04:19 浏览: 80
以下是相应的代码:
```c++
#include<iostream>
using namespace std;
const double PI = 3.14159;
class Shape {
public:
virtual double GetArea() = 0;
virtual double GetPerim() = 0;
};
class Rectangle : public Shape {
private:
double length;
double width;
public:
Rectangle(double a, double b) : length(a), width(b) {}
double GetArea() {
return length * width;
}
double GetPerim() {
return 2 * (length + width);
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double GetArea() {
return PI * radius * radius;
}
double GetPerim() {
return 2 * PI * radius;
}
};
int main()
{
double radius;
double a, b;
cin >> radius >> a >> b;
Circle c(radius);
Rectangle rect(a, b);
Shape* pShapeArray[] = { &c, &rect };
for (int i = 0; i < 2; i++)
{
cout << "perimeter:" << pShapeArray[i]->GetPerim() << endl;
cout << "area:" << pShapeArray[i]->GetArea() << endl;
}
return 0;
}
```
在上述代码中,我们首先定义了一个抽象类`Shape`,其中包含了两个纯虚函数`GetArea`和`GetPerim`,代表获取面积和周长。然后,我们分别定义了矩形`Rectangle`和圆形`Circle`两个类,并且它们都继承了`Shape`类,实现了`GetArea`和`GetPerim`函数。
在`main`函数中,我们首先通过`cin`语句获取输入的圆形半径和矩形的长和宽,接着定义了一个指针数组`pShapeArray`,其中包含了圆形和矩形两个对象的地址。最后,我们通过循环遍历指针数组,分别输出圆形和矩形的周长和面积。需要注意的是,在循环中,我们使用了基类指针调用派生类的函数,这就是多态的应用。
阅读全文