例应用抽象类,求圆、圆内接正方形和圆外切正方形的面积和周长。
时间: 2023-10-14 10:06:09 浏览: 264
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
好的,这是一个使用抽象类的例子,具体实现如下:
```
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.141592653589793238;
// 定义抽象类 Shape
class Shape {
public:
// 纯虚函数,计算面积
virtual double area() const = 0;
// 纯虚函数,计算周长
virtual double perimeter() const = 0;
};
// 定义圆类
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const {
return PI * radius * radius;
}
double perimeter() const {
return 2 * PI * radius;
}
};
// 定义圆内接正方形类
class SquareInCircle : public Shape {
private:
double radius;
public:
SquareInCircle(double r) : radius(r) {}
double area() const {
return 2 * radius * radius;
}
double perimeter() const {
return 8 * radius;
}
};
// 定义圆外接正方形类
class SquareOutCircle : public Shape {
private:
double radius;
public:
SquareOutCircle(double r) : radius(r) {}
double area() const {
return 4 * radius * radius;
}
double perimeter() const {
return 16 * radius / sqrt(2);
}
};
int main() {
double r = 1.0;
Circle c(r);
SquareInCircle sic(r);
SquareOutCircle soc(r);
cout << "圆的面积: " << c.area() << ", 周长: " << c.perimeter() << endl;
cout << "圆内接正方形的面积: " << sic.area() << ", 周长: " << sic.perimeter() << endl;
cout << "圆外接正方形的面积: " << soc.area() << ", 周长: " << soc.perimeter() << endl;
return 0;
}
```
运行程序,输出结果如下:
```
圆的面积: 3.14159, 周长: 6.28319
圆内接正方形的面积: 2, 周长: 8
圆外接正方形的面积: 4, 周长: 11.3137
```
这个例子中,我们定义了一个抽象类 Shape,包含了两个纯虚函数 area 和 perimeter,分别用来计算形状的面积和周长。然后我们又定义了三个派生类 Circle、SquareInCircle 和 SquareOutCircle,它们都继承了 Shape 类,并且实现了自己的 area 和 perimeter 函数。通过这样的设计,我们可以方便地计算出圆、圆内接正方形和圆外接正方形的面积和周长。
阅读全文