编写计算正方形、长方形、圆形的面积和周长的类。要求:(1)这三个类有一个公共的基类。(2)这三个类计算正方形、长方形、圆形的面积和周长的的成员函数名字相同。(3)按照运行时的多态性方法设计一个测试主函数,并进行测试
时间: 2024-02-18 17:05:46 浏览: 71
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
好的,这个问题我已经回答过了,我再给你提供一遍代码实现。
```C++
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
virtual double getArea() = 0;
virtual double getPerimeter() = 0;
};
class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
double getArea() { return side * side; }
double getPerimeter() { return 4 * side; }
};
class Rectangle : public Shape {
private:
double length, width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
double getArea() { return length * width; }
double getPerimeter() { return 2 * (length + width); }
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() { return M_PI * radius * radius; }
double getPerimeter() { return 2 * M_PI * radius; }
};
void printInfo(Shape* shape) {
cout << "Area: " << shape->getArea() << endl;
cout << "Perimeter: " << shape->getPerimeter() << endl;
}
int main() {
Shape* square = new Square(4.0);
Shape* rectangle = new Rectangle(3.0, 4.0);
Shape* circle = new Circle(5.0);
printInfo(square);
printInfo(rectangle);
printInfo(circle);
delete square;
delete rectangle;
delete circle;
return 0;
}
```
这个程序实现了一个计算正方形、长方形、圆形面积和周长的类,它们都继承自一个基类 Shape。其中,Shape 是一个抽象类,它定义了两个纯虚函数 getArea() 和 getPerimeter(),分别用于计算面积和周长。
每个派生类都实现了这两个函数,同时添加了它们自己的私有变量和构造函数。Square 类添加了一个 side 变量,Circle 类添加了一个 radius 变量,Rectangle 类添加了 length 和 width 变量。
在主函数中,我们创建了三个指向 Shape 类对象的指针,并分别指向一个 Square、一个 Rectangle 和一个 Circle 对象。然后,我们调用函数 printInfo(),它接受一个 Shape 类型的指针,并输出该图形的面积和周长。
需要注意的是,在程序结束时,需要手动释放每个对象的内存,以避免内存泄漏。这里使用 delete 运算符对每个指针进行释放。
希望我的回答可以帮助到你。
阅读全文