编写计算正方形、长方形、圆形的面积和周长的类。要求:(1)这三个类有一个公共的基类。(2)这三个类计算正方形、长方形、圆形的面积和周长的的成员函数名字相同。(3)按照运行时的多态性方法设计一个测试主函数,并进行测试
时间: 2024-02-18 14:05:44 浏览: 111
好的,我理解了你的问题。我先给出代码实现,接着解释每个部分的含义和作用。
```C++
#include<iostream>
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 3.14 * radius * radius; } // 计算面积
double getPerimeter() { return 2 * 3.14 * radius; } // 计算周长
};
int main(){
Shape* s1 = new Square(4);
Shape* s2 = new Rectangle(3, 4);
Shape* s3 = new Circle(5);
cout << "Square area: " << s1->getArea() << endl;
cout << "Square perimeter: " << s1->getPerimeter() << endl;
cout << "Rectangle area: " << s2->getArea() << endl;
cout << "Rectangle perimeter: " << s2->getPerimeter() << endl;
cout << "Circle area: " << s3->getArea() << endl;
cout << "Circle perimeter: " << s3->getPerimeter() << endl;
delete s1;
delete s2;
delete s3;
return 0;
}
```
这个程序实现了一个计算正方形、长方形、圆形面积和周长的类,它们都继承自一个基类 Shape。其中,Shape 是一个抽象类,它定义了两个纯虚函数 getArea() 和 getPerimeter(),分别用于计算面积和周长。
每个派生类都实现了这两个函数,同时添加了它们自己的私有变量和构造函数。Square 类添加了一个 side 变量,Circle 类添加了一个 radius 变量,Rectangle 类添加了 length 和 width 变量。
在主函数中,我们创建了三个指向 Shape 类对象的指针,并分别指向一个 Square、一个 Rectangle 和一个 Circle 对象。然后,我们调用每个对象的 getArea() 和 getPerimeter() 函数,并输出结果。
需要注意的是,在程序结束时,需要手动释放每个对象的内存,以避免内存泄漏。这里使用 delete 运算符对每个指针进行释放。
希望我的回答可以帮助到你。
阅读全文