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

C++补充基础小知识:什么是接口类 和 抽象类?为什么要继承?

接口类抽象类,确实有很多人容易混淆,今天我就一次性帮你彻底搞懂这两个概念,以及为什么要继承


🌳 1️⃣ 什么是接口类?什么是抽象类?

分类接口类 (Interface)抽象类 (Abstract Class)
定义只包含纯虚函数(没有实现)至少包含一个纯虚函数,可以有部分实现
目的只定义规范,不实现逻辑定义规范 + 可以提供部分实现
成员变量没有(通常不应该有)可以有成员变量和普通成员函数
典型例子class IShape { virtual void draw() = 0; };class Shape { virtual void draw() = 0; void move() {}; };
是否必须继承✅ 必须继承并实现✅ 必须继承并实现纯虚函数
特点类似于纯接口类似于半成品,可以扩展

举例 1:接口类

// 接口类:完全定义规范,不写实现
class IShape {
public:virtual void draw() = 0; // 纯虚函数virtual ~IShape() {}     // 虚析构
};

必须继承它才能用:

class Circle : public IShape {
public:void draw() override { qDebug() << "Draw Circle"; }
};

举例 2:抽象类

class Shape {
public:virtual void draw() = 0; // 抽象函数void move() { qDebug() << "Move shape"; } // 已实现
};

抽象类可以提供一部分公共实现(如 move()),子类继承后可以直接用。


🏗️ 2️⃣ 为什么必须继承它们?

因为:

  • 接口类抽象类只是“模板”/“规范”,没有完整实现,不能直接创建对象

  • 编译器禁止实例化(new)它们。

举例:

IShape shape; // ❌ 错误,不能创建接口类对象
Shape shape;  // ❌ 错误,不能创建抽象类对象

你必须 继承 + 实现纯虚函数,才能使用:

class Circle : public IShape {void draw() override { qDebug() << "Draw Circle"; }
};Circle c; // ✅ OK

🧭 3️⃣ 接口类 vs. 抽象类 - 什么时候用?

你要做什么?选哪个?举例
定义一个“规范”,子类必须遵循,且不需要公共代码接口类IDrawable, ISerializable
定义一个“规范”,但有些通用代码可以共享抽象类QWidget, QThread(部分实现)
已有完整实现,不需要额外规范具体类QTimer, QList

🏆 4️⃣ 总结

接口类 = 纯虚函数集合,只定义规范,不提供实现。
抽象类 = 至少有一个纯虚函数,可以提供部分实现
✅ 使用它们时,必须 继承并实现所有纯虚函数 才能创建对象。
✅ 目的是:面向接口编程,让代码更灵活、可扩展。


🎓 5️⃣ 举个生活中的例子

角色接口类抽象类具体类
概念会飞的东西(不能直接用)飞行工具(有一些基本结构,但不能直接买)一架飞机(可以买来用)
类比IFlyableAircraftBoeing737
特点只定义规范有些实现全部实现
代码virtual void fly() = 0;virtual void fly() = 0; void refuel() {}void fly() override {}

如果你有实际代码场景(比如某个类不知道该不该继承),发给我,我们一起看看! 🚀

相关文章:

  • 易学探索助手-个人记录(十二)
  • 运用集合知识做斗地主案例
  • DOM和BOM的区别
  • 国内外AI编程工具对比(Trae对比Cursor)
  • CloudCompare——点云统计滤波
  • 关于JavaScript、TypeScript Module的配置和用法
  • 解决 AntV G6 使用 SVG 渲染脑图时节点文字过多导致拖动卡顿的问题
  • Mac OS 使用说明
  • 从0到1:某智慧园区数字孪生项目的技术选型复盘
  • 【Golang入门】第一章:环境搭建与Hello World
  • C++学习细节回顾(汇总三)
  • Java中的类和对象
  • 【MYSQL】mysql单表亿级数据查询优化处理
  • 可变参数函数
  • 4.Consul服务注册与发现
  • 《接口和抽象类到底怎么选?设计原则与经典误区解析》
  • 【笔记】修复ImportError: cannot import name ‘Mapping‘ from ‘collections‘
  • YOLO 系列算法的参数量
  • 上交具身机器人的视觉运动导航!HTSCN:融合空间记忆与语义推理认知的导航策略
  • 时间的基本概念与相关技术二
  • 深圳vi设计公司排行/企业网站优化方案
  • 林州做网站/seo工作职责
  • 基于html5个人网站设计论文/腾讯企点怎么注册
  • 网站开发网页设计/旅游网站网页设计
  • 中国纪检监察报社社长/西安seo优化工作室
  • 利用vps做网站/企业网站管理