c++写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()、printLength()分别输出以上三者的面积和周长,三个图形的数据在定义对象时给定。另外实现一个通用的函数计算面积和周长,而不需要考虑是何种图形。
时间: 2024-02-13 19:02:32 浏览: 84
下面是一个符合要求的 C++ 程序:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 抽象基类 Shape
class Shape {
public:
virtual void printArea() = 0;
virtual void printLength() = 0;
};
// 派生类 Circle
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
void printArea() {
cout << "圆形的面积是:" << M_PI * radius * radius << endl;
}
void printLength() {
cout << "圆形的周长是:" << 2 * M_PI * radius << endl;
}
private:
double radius;
};
// 派生类 Square
class Square : public Shape {
public:
Square(double l) : length(l) {}
void printArea() {
cout << "正方形的面积是:" << length * length << endl;
}
void printLength() {
cout << "正方形的周长是:" << 4 * length << endl;
}
private:
double length;
};
// 派生类 Rectangle
class Rectangle : public Shape {
public:
Rectangle(double l, double w) : length(l), width(w) {}
void printArea() {
cout << "矩形的面积是:" << length * width << endl;
}
void printLength() {
cout << "矩形的周长是:" << 2 * (length + width) << endl;
}
private:
double length;
double width;
};
// 计算图形的面积和周长
void calcAreaLength(Shape* shape) {
shape->printArea();
shape->printLength();
}
int main() {
// 创建三个不同的图形对象
Circle c(5);
Square s(6);
Rectangle r(4, 5);
// 输出每个图形的面积和周长
c.printArea();
c.printLength();
s.printArea();
s.printLength();
r.printArea();
r.printLength();
// 使用通用函数计算每个图形的面积和周长
calcAreaLength(&c);
calcAreaLength(&s);
calcAreaLength(&r);
return 0;
}
```
该程序定义了 `Shape` 抽象基类,以及三个派生类 `Circle`、`Square` 和 `Rectangle`,实现了计算面积和周长的虚函数 `printArea()` 和 `printLength()`。还实现了一个通用函数 `calcAreaLength()`,可以计算任意图形的面积和周长。
在 `main()` 函数中,我们创建了三个不同的图形对象,然后分别调用它们的 `printArea()` 和 `printLength()` 函数输出面积和周长。最后,我们使用 `calcAreaLength()` 函数计算每个图形的面积和周长。
阅读全文