c++定义一个抽象类Shape,定义一个纯虚函数area()用以计算面积,从Shape派生出长方形、梯形、圆形派生类。程序中通过基类指针来调用派生类中的纯虚函数,计算不同形状的面积。

#include <iostream>

#include <cmath>

#ifndef M_PI

#define M_PI 3.14159265358979323846

#endif

// 定义抽象类Shape

class Shape {

public:

    virtual double area() = 0; // 纯虚函数

};

// 长方形类

class Rectangle : public Shape {

private:

    double width, height;

public:

    Rectangle(double w, double h) : width(w), height(h) {}

    double area() override {

        return width * height;

    }

};

// 梯形类

class Trapezoid : public Shape {

private:

    double base1, base2, height;

public:

    Trapezoid(double b1, double b2, double h) : base1(b1), base2(b2), height(h) {}

    double area() override {

        return (base1 + base2) * height / 2.0;

    }

};

// 圆形类

class Circle : public Shape {

private:

    double radius;

public:

    Circle(double r) : radius(r) {}

    double area() override {

        return M_PI * pow(radius, 2);

    }

};

int main() {

    Shape* shapes[3];

    shapes[0] = new Rectangle(5.0, 4.0);

    shapes[1] = new Trapezoid(2.0, 3.0, 4.0);

    shapes[2] = new Circle(3.0);

    for(int i = 0; i < 3; i++) {

        std::cout << "Shape " << i+1 << " area: " << shapes[i]->area() << std::endl;

        delete shapes[i];

    }

    return 0;

}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是实现要求的 C++ 代码示例: ```cpp #include <iostream> using namespace std; // 抽象类 Shape class Shape { public: // 纯虚函数 area() virtual double area() = 0; }; // 长方形 Rectangle class Rectangle : public Shape { private: double width; double height; public: Rectangle(double w, double h) { width = w; height = h; } // 实现纯虚函数 area() double area() { return width * height; } }; // 梯形 Trapezoid class Trapezoid : public Shape { private: double top; double bottom; double height; public: Trapezoid(double t, double b, double h) { top = t; bottom = b; height = h; } // 实现纯虚函数 area() double area() { return (top + bottom) * height / 2; } }; // 圆形 Circle class Circle : public Shape { private: double radius; public: Circle(double r) { radius = r; } // 实现纯虚函数 area() double area() { return 3.14 * radius * radius; } }; // 主函数 int main() { // 定义基类指针派生类对象 Shape* shape; Rectangle rect(3, 4); Trapezoid trap(2, 4, 3); Circle cir(2); // 使用基类指针调用不同派生类area() 函数 shape = &rect; cout << "Rectangle area: " << shape->area() << endl; shape = &trap; cout << "Trapezoid area: " << shape->area() << endl; shape = &cir; cout << "Circle area: " << shape->area() << endl; return 0; } ``` 运行结果: ``` Rectangle area: 12 Trapezoid area: 9 Circle area: 12.56 ``` 这个程序定义了抽象基类 `Shape`,并从派生了三个具体的形状 `Rectangle`、`Trapezoid` 和 `Circle`。每个派生类都实现了基类纯虚函数 `area()`,用于计算不同形状面积。在主函数,使用基类指针分别调用不同派生类的 `area()` 函数,输不同形状面积
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值