写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()、printLength()分别输出以上三者的面积和周长,三个图形的数据在定义对象时给定。另外实现一个通用的函数计算面积和周长,而不需要考虑是何种图形。
时间: 2024-02-15 10:05:14 浏览: 83
声明一个图形基类并在它的基础上派生出其他类并编写程序实现各类的定义及实现
好的,以下是代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 定义抽象基类 Shape
class Shape {
public:
// 纯虚函数 printArea() 和 printLength() 分别输出面积和周长
virtual void printArea() = 0;
virtual void printLength() = 0;
// 虚析构函数
virtual ~Shape() {}
};
// 定义 Circle 类
class Circle : public Shape {
private:
double radius;
public:
// 构造函数
Circle(double r) : radius(r) {}
// 实现 printArea() 函数
void printArea() {
cout << "The area of the circle is: " << M_PI * radius * radius << endl;
}
// 实现 printLength() 函数
void printLength() {
cout << "The circumference of the circle is: " << 2 * M_PI * radius << endl;
}
};
// 定义 Square 类
class Square : public Shape {
private:
double side;
public:
// 构造函数
Square(double s) : side(s) {}
// 实现 printArea() 函数
void printArea() {
cout << "The area of the square is: " << side * side << endl;
}
// 实现 printLength() 函数
void printLength() {
cout << "The perimeter of the square is: " << 4 * side << endl;
}
};
// 定义 Rectangle 类
class Rectangle : public Shape {
private:
double length;
double width;
public:
// 构造函数
Rectangle(double l, double w) : length(l), width(w) {}
// 实现 printArea() 函数
void printArea() {
cout << "The area of the rectangle is: " << length * width << endl;
}
// 实现 printLength() 函数
void printLength() {
cout << "The perimeter of the rectangle is: " << 2 * (length + width) << endl;
}
};
// 定义通用函数计算面积和周长
void printShapeInfo(const Shape& shape) {
shape.printArea();
shape.printLength();
}
int main() {
// 定义 Circle 对象并输出其面积和周长
Circle circle(5);
circle.printArea();
circle.printLength();
// 定义 Square 对象并输出其面积和周长
Square square(4);
square.printArea();
square.printLength();
// 定义 Rectangle 对象并输出其面积和周长
Rectangle rectangle(3, 4);
rectangle.printArea();
rectangle.printLength();
// 通过指针调用通用函数计算面积和周长
Shape* shape;
shape = &circle;
printShapeInfo(*shape);
shape = □
printShapeInfo(*shape);
shape = &rectangle;
printShapeInfo(*shape);
return 0;
}
```
运行结果如下:
```
The area of the circle is: 78.5398
The circumference of the circle is: 31.4159
The area of the square is: 16
The perimeter of the square is: 16
The area of the rectangle is: 12
The perimeter of the rectangle is: 14
The area of the circle is: 78.5398
The circumference of the circle is: 31.4159
The area of the square is: 16
The perimeter of the square is: 16
The area of the rectangle is: 12
The perimeter of the rectangle is: 14
```
阅读全文