接口描述了类的行为和功能,而不需要完成类的特定实现。

C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。

如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示:

class Box { public: // 纯虚函数 virtual double getVolume() = 0; private: double length; // 长度 double breadth; // 宽度 double height; // 高度 };

设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。

因此,如果一个 ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。

可用于实例化对象的类被称为具体类

抽象类的实例

请看下面的实例,基类 Shape 提供了一个接口 getArea(),在两个派生类 Rectangle 和 Triangle 中分别实现了 getArea()

实例

#include <iostream> using namespace std; // 基类

class Shape { public:

// 提供接口框架的纯虚函数 virtual int getArea() = 0; void setWidth(int w) { width = w; }

void setHeight(int h) { height = h; } protected: int width; int height; };

// 派生类 class Rectangle: public Shape { public: int getArea() { return (width * height); } };

class Triangle: public Shape { public: int getArea() { return (width * height)/2; } };

int main(void) { Rectangle Rect; Triangle Tri; Rect.setWidth(5); Rect.setHeight(7);

// 输出对象的面积 cout << "Total Rectangle area: " << Rect.getArea() << endl; Tri.setWidth(5);

Tri.setHeight(7); // 输出对象的面积 cout << "Total Triangle area: " << Tri.getArea() << endl; return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

Total Rectangle area: 35 Total Triangle area: 17

从上面的例中,我们可以看到一个抽象类是如何定义一个接口 getArea(),两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。

知识分享:C++ 接口(抽象类)相关推荐

  1. java接口匿名内部类_JAVA技术分享:接口,内部类,匿名内部类

    原标题:JAVA技术分享:接口,内部类,匿名内部类 接口: 接口中只有抽象方法,而没有非抽象方法 特点: 1:接口不能被实例化,只能通过多态的形式,让子类实例化 2:接口的子类 A:可以是具体类,但是 ...

  2. oracle基础知识文档,Oracle 基础知识分享PPT

    因测试组需求,所以把Oracle基础知识整理成了PPT,并讲解了一下(PPT无风格,简约派吐舌头). Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的 ...

  3. html5扩展函数的使用方法,知识分享:JavaScript基础语法

    知识分享:JavaScript基础语法 原创 mb5fd868d58f1472021-01-22 16:52:56©著作权 阅读数 41 ©著作权归作者所有:来自51CTO博客作者mb5fd868d5 ...

  4. 联发科(MTK)MT6771 安卓核心板 安卓主板方案知识分享

    联发科(MTK)MT6771 安卓核心板 安卓主板方案知识分享 基于MT6771八核(4x Cortex A73 2.0GHz and 4x Cortex A53 2.0GHz)处理器,同时搭载一颗能 ...

  5. springboot中药知识分享网站设计 毕业设计-附源码201818

    摘  要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...

  6. 知识分享之项目管理——四象限法则

    知识分享之项目管理--四象限法则 背景 作为一个标准程序员做到最后通常有两条路可选,一路技术走到黑和转管理,技术自然不用说,需要全面都熟,专通几项.而管理就要提到第一个点就是项目管理,因为第一个阶段通 ...

  7. 如何利用飞书文档OpenAPI实现自动计算知识分享参会人员团队占比?

    一.背景 本case是总结了日常工作流中提炼出的一个小优化,让系统帮助提效,case虽简单,但提效显著. 二.需求分析 为了深入了解每个团队知识分享的参与度,更好地运营团队知识,服务团队成员,需要统计 ...

  8. springboot中药知识分享网站毕业设计源码201818

    摘  要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...

  9. 计算机主板组装有什么意义,主板插槽的功能,与组装计算机的基本知识分享

    主板插槽的功能,与组装计算机的基本知识分享 发布时间:2019-05-28 09:30 来源:互联网 当前栏目:电脑基础知识 新手在组装计算机时看到主板上的各种插槽是非常麻烦的.计算机上的部件必须连接 ...

  10. 本周知识分享会议总结

    2020年7月第三周知识分享汇总 DQ的项目经验分享 项目过程的介绍 项目中遇到的问题 项目中的知识分享 项目中的工具分享 HXD的数据仓库知识分享 数据仓库 ETL的概念 kettle的案例 课程质 ...

最新文章

  1. Lean Startup
  2. OCM备考 一、Server config 之手工创建数据库
  3. linux-shell命令之chown(change owner)【更改拥有者】
  4. javaweb笔记1
  5. python语言用什么关键字来声明一个类_Python语言和标准库(第三章:类和对象)...
  6. ubuntu 16.04常用命令
  7. Java线程间通信-回调的实现方式
  8. 计算机组成原理平均cpi怎么算_【计算机考研】每日一题数网操组130
  9. 20200126:(leetcode)三数之和 最接近的三数之和(含图解)
  10. Saur家的官方语言
  11. python下载文件的三种方法
  12. 第十一届蓝桥杯校园赛---原题+解析+答案
  13. 国际区块链专利:中国蚂蚁、平安、腾讯、复杂美位列前十
  14. 戴尔联手九大云计算伙伴成立云联盟:通吃混合云
  15. python中的init_python中init什么意思
  16. 实现将网页多条磁力链接一次性全部下载
  17. python编码与解码
  18. echarts----雷达图
  19. 【LeNet5】简单车牌识别
  20. SQLAlchemy的CRUD操作

热门文章

  1. 股东刚减持,股价却起飞?用Python量化A股解禁数据,利空出尽是利好? | 邢不行
  2. 数据结构之哈夫曼编译码器(C语言版)
  3. oppo申请鸿蒙系统,OPPO公关:拒绝华为鸿蒙系统!理由却是这样的
  4. 交换机或路由器的配置模式
  5. I3C协议Single Data Rate(SDR)模式研读(六):通用命令代码(CCC)
  6. 423,特别的一天!
  7. PHP企业级应用之常见缓存技术篇二
  8. maven js css 压缩,maven压缩js css
  9. 情人节程序员用HTML网页表白【告白展示墙】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  10. 第九章、图形绘制——图形控件和图形方法的应用