写一个程序,定义抽象基类 Shape,由它派生出 3 个派生类:Circle(圆形)、Square(正方 形)、Rectangle(矩形)。利用指针、虚函数 printArea()、printLength()分别计算以上三者的面 积和周长,三个图形的数据在定义对象时给定。另外实现一个通用的函数输出面积和周长, 而不需要考虑是何种图形。
时间: 2024-03-13 20:42:27 浏览: 97
Java:使用抽象类定义一个“形状类”,能够计算周长和面积。
好的,以下是一个 C++ 实现的示例:
```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, 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 circle(5);
Square square(4);
Rectangle rectangle(3, 5);
cout << "圆形的信息:" << endl;
printInfo(&circle);
cout << "正方形的信息:" << endl;
printInfo(&square);
cout << "矩形的信息:" << endl;
printInfo(&rectangle);
return 0;
}
```
在上述代码中,我们定义了一个抽象基类 `Shape`,其中包含两个纯虚函数 `getArea()` 和 `getLength()`,用于计算图形的面积和周长。然后我们又定义了三个派生类 `Circle`、`Square` 和 `Rectangle`,分别代表圆形、正方形和矩形,这些类都实现了基类中的两个纯虚函数。接着我们定义了一个通用函数 `printInfo()`,该函数接收一个 `Shape` 类型的指针,并输出该图形的面积和周长。最后在 `main()` 函数中,我们创建了圆形、正方形和矩形的对象,并分别调用 `printInfo()` 函数输出它们的信息。
阅读全文