写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()、printLength()分别计算以上三者的面积和周长,三个图形的数据在定义对象时给定。另外实现一个通用的函数输出面积和周长,而不需要考虑是何种图形。
时间: 2024-03-27 21:35:28 浏览: 105
好的,下面是程序实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 抽象基类
class Shape {
public:
// 纯虚函数,用于计算面积
virtual double getArea() = 0;
// 纯虚函数,用于计算周长
virtual double getLength() = 0;
};
// 圆形类
class Circle : public Shape {
private:
double radius; // 半径
public:
Circle(double r) {
radius = r;
}
double getArea() {
return M_PI * radius * radius;
}
double getLength() {
return 2 * M_PI * radius;
}
};
// 正方形类
class Square : public Shape {
private:
double side; // 边长
public:
Square(double s) {
side = s;
}
double getArea() {
return side * side;
}
double getLength() {
return 4 * side;
}
};
// 矩形类
class Rectangle : public Shape {
private:
double width; // 宽
double height; // 高
public:
Rectangle(double w, double h) {
width = w;
height = h;
}
double getArea() {
return width * height;
}
double getLength() {
return 2 * (width + height);
}
};
// 通用函数,可以计算任意图形的面积和周长
void printInfo(Shape* shape) {
cout << "面积是:" << shape->getArea() << endl;
cout << "周长是:" << shape->getLength() << endl;
}
int main() {
Circle c(5);
Square s(4);
Rectangle r(3, 5);
cout << "圆形的信息:" << endl;
printInfo(&c);
cout << endl;
cout << "正方形的信息:" << endl;
printInfo(&s);
cout << endl;
cout << "矩形的信息:" << endl;
printInfo(&r);
cout << endl;
return 0;
}
```
在这个程序中,我们定义了一个抽象基类Shape,其中包含了两个纯虚函数getArea和getLength,分别用于计算面积和周长。然后我们从Shape派生出了三个具体的派生类Circle、Square、Rectangle,分别代表圆形、正方形、矩形。这三个派生类中实现了基类中的两个纯虚函数,并且在构造函数中初始化了相应的数据成员。
接着,我们定义了一个通用函数printInfo,它可以计算任意图形的面积和周长。这个函数接收一个Shape类型的指针作为参数,然后调用getArea和getLength函数来计算面积和周长,并输出到屏幕上。
在main函数中,我们分别创建了一个圆形对象、一个正方形对象和一个矩形对象,并且通过指针调用了printInfo函数,来输出它们的面积和周长。
阅读全文