计算三角形,正方形,圆形面、周长。要求: (1)设计基类shape,并定义area(),cir()两个纯虚函数。 (2)设计三个派生类:直角三角形,正方形,圆形。 (3)在主函数中,利用基类指针,
时间: 2024-09-24 22:12:15 浏览: 47
首先,让我们来解释一下如何创建一个基本的Shape类以及它的派生类来计算三角形、正方形和圆形的面积(area)和周长(cir),假设它们分别为perimeter。这是一个基础的设计:
```cpp
#include <iostream>
using namespace std;
// 基类Shape,包含纯虚函数
class Shape {
public:
// 纯虚函数,用于计算面积
virtual double area() const = 0;
// 纯虚函数,用于计算周长
virtual double cir() const = 0;
};
// 派生类Triangle,代表直角三角形
class Triangle : public Shape {
private:
double base;
double height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double area() const override { return 0.5 * base * height; }
double cir() const override {
// 直角三角形的周长等于两边之和加斜边
return base + height + sqrt(base * base + height * height);
}
};
// 派生类Square,代表正方形
class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
double area() const override { return side * side; }
double cir() const override { return 4 * side; } // 正方形的周长等于4倍边长
};
// 派生类Circle,代表圆形
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override { return M_PI * radius * radius; }
double cir() const override { return 2 * M_PI * radius; } // 圆的周长公式
};
int main() {
// 使用基类指针处理不同形状
Shape* shapes[3] = {new Triangle(3, 4), new Square(5), new Circle(2)};
for (int i = 0; i < 3; ++i) {
cout << "Shape " << i+1 << ": ";
cout << "Area: " << shapes[i]->area() << endl;
cout << "Circumference: " << shapes[i]->cir() << endl;
delete shapes[i]; // 销毁动态分配的对象
}
return 0;
}
阅读全文