当前位置: 首页 > news >正文

C++抽象类(接口)

       【欢迎关注编码小哥,学习更多实用的编程方法和技巧】

       在C++中,接口通常是通过抽象类来实现的。抽象类至少包含一个纯虚函数,这意味着派生类必须实现这个函数。下面是一个简单的例子,展示了如何定义一个接口抽象类以及如何通过派生类来实现它。

代码举例

// 声明一个接口抽象类
class IShape

{
public:
    // 纯虚函数,表示计算面积的操作
    virtual double area() const = 0;

    // 虚析构函数,确保派生类对象销毁时能够调用正确的析构函数
    virtual ~IShape() {}
};

// 实现接口的具体类:圆形
class Circle : public IShape

{
private:
    double radius;

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

    // 实现接口中的纯虚函数
    double area() const override

    {
        return 3.14159 * radius * radius;
    }
};

// 实现接口的具体类:矩形
class Rectangle : public IShape

{
private:
    double width, height;

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

    // 实现接口中的纯虚函数
    double area() const override

    {
        return width * height;
    }
};

int main()

{
    // 创建圆形和矩形对象
    Circle circle(5);
    Rectangle rectangle(3, 6);

    // 使用基类指针指向派生类对象
    IShape* shapes[] = {&circle, &rectangle};

    // 通过基类指针调用派生类的方法
    for (const auto& shape : shapes)

    {
        std::cout << "Area: " << shape->area() << std::endl;
    }

    return 0;
}

       在这个例子中,IShape是一个接口抽象类,它定义了一个纯虚函数area()。Circle和Rectangle类继承自IShape并实现了area()函数。在main()函数中,我们创建了一个指向IShape的指针数组,这个数组包含了Circle和Rectangle对象的地址。通过这些基类指针,我们可以调用派生类的area()方法,这就是多态的体现。

注意

       为了确保通过基类(父类)指针删除派生类(子类)对象时能够正确地调用派生类的析构函数,我们在抽象类中提供了一个虚析构函数。这是一个良好的编程习惯,即使它是空的。

 


http://www.mrgr.cn/news/62954.html

相关文章:

  • Chromium HTML5 新的 Input 类型number对应c++
  • CMake知识点
  • 中小企业设备资源优化:Spring Boot系统实现
  • c# 实现文件更新通知
  • CSS浮雕效果
  • 【JavaSE练习题】方法的创建和调用
  • 2024网鼎杯初赛-青龙组-WP
  • AI大模型原来这么简单!一篇文章拯救你的技术恐惧症
  • liunx网络套接字 | 实现基于tcp协议的echo服务
  • 来了解一下!!!——React
  • CF979
  • 函数的调用
  • JS中DOM和BOM
  • 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
  • 【力扣热题100】[Java版] 刷题笔记-101. 对称二叉树
  • 嵌入式——了解stm32
  • 新加坡托管服务器VS香港托管服务器:AI时代的选择策略
  • Android 音量调节流程分析
  • 2024年网鼎杯青龙组逆向2题wp
  • 量化交易backtrader实践(三)_指标与策略篇(6)_股票软件指标参考A
  • C++集合运算函数总结-
  • DCS系统
  • LVGL盒子模型的概念
  • 五、鸿蒙开发-组件状态管理
  • OpenCSG携手书生·浦语:InternLM2.5-20B-Chat 正式上线,共建AI未来新生态
  • 哪里能找到海量短视频素材和制作教程?