文章目录

  • 概述
  • 设计策略

概述

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

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;
}

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

Total Rectangle area: 35
Total Triangle area: 17

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

设计策略

面向对象的系统可能会使用一个抽象基类为所有的外部应用程序**提供一个适当的、通用的、标准化的接口。**然后,派生类通过继承抽象基类,就把所有类似的操作都继承下来。

外部应用程序提供的功能(即公有函数)在抽象基类中是以纯虚函数的形式存在的。这些纯虚函数在相应的派生类中被实现。

这个架构也使得新的应用程序可以很容易地被添加到系统中,即使是在系统被定义之后依然可以如此。

C++ 接口(抽象类)的概念相关推荐

  1. C++中的接口(抽象类)

    1.Cpp中的接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现.接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念.如果类中至少有一 ...

  2. C++ 接口(抽象类)

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105020800 接 ...

  3. java抽象机制_Java很好学:接口+抽象类+事件监听机制

    接口?抽象类? 首先知道知道下接口.抽象类的概念 接口:只含有常量和抽象方法(只有方法名和参数不含方法体的方法) 抽象类:可以定义常量和抽象方法(和接口一样),还可以定义变量和普通方法和构造方法(和一 ...

  4. 12.面向对象(继承/super/接口/抽象类)

    面向对象 继承与派生 继承 继承顺序 继承原理 子类调用父类的方法(super) 组合 接口 接口的概念: 接口的概念解释和使用: python中的接口: 抽象类 面向对象 继承与派生 继承 什么是继 ...

  5. java 接口 抽象类

    抽象类 先来了解抽象类的概念 : 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类 ...

  6. jdk8 接口抽象类区别_JDK 8时代的抽象类与接口

    jdk8 接口抽象类区别 在新的Java 8日期和时间API:Stephen Colebourne的访谈中 , Stephen Colebourne告诉Hartmut Schlosser :" ...

  7. 第一章 计算机网络 5 分层结构/协议/接口/服务的概念 [计算机网络笔记]

    第一章 计算机网络 5 分层结构/协议/接口/服务的概念 本笔记参考书目: 计算机网络(第8版)谢希仁 2021王道计算机网络视频公开课 本节重点: 分层结构/协议/接口/服务 实体/对等实体 PCI ...

  8. 转载:集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念

    转自:思.睿博客文章 原作者:emouse 地址: http://www.cnblogs.com/emouse/ 1.1.1 接口相关电路及概念 1. 集电极开路输出 在电路中常会遇到漏极开路(Ope ...

  9. 集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念

    转载:http://www.cnblogs.com/emouse/ 1.1.1 接口相关电路及概念 集电极开路输出 在电路中常会遇到漏极开路(Open Drain)和集电极开路(Open Collec ...

  10. 【转载】 集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念

    1.1.1 接口相关电路及概念 1. 集电极开路输出 在电路中常会遇到漏极开路(Open Drain)和集电极开路(Open Collector)两种情形.漏极开路电路概念中提到的"漏&qu ...

最新文章

  1. asp用于取代什么技术_.NET的未来:关于.NET5,每个.Net开发人员必须知道什么
  2. EonerCMS——做一个仿桌面系统的CMS(三)
  3. python 提取字符串中的数字
  4. Codeforces Round #564 (Div. 2)A
  5. 我的博客今天6岁298天了,我领取了元老博主徽章
  6. 想象中的同居生活 VS 真实的同居生活
  7. 2020 年程序员高考试卷来了!
  8. python绘制风向玫瑰图和污染物玫瑰图
  9. NodeManager节点启动报错内存不足
  10. pythonista安卓_Android平台有哪些软件类似于iOS上的JSbox、Pythonista和Thor?
  11. 桌面应用之electron开发
  12. 文件夹批量重命名的小技巧
  13. SVCHOST启动服务实战
  14. heartbeat高可用详解
  15. Android5.1 快捷开关如何添加和刷新状态
  16. Halcon一维码识别实例
  17. 2020PAT甲级秋季7-4 Professional Ability Test (30分)
  18. svg 地图_一秒带你制作出全国各省市区县地图
  19. 解决FBX模型导入Unity后没有贴图的问题
  20. QUANT[2]:量化交易策略基本框架搭建

热门文章

  1. module ‘tensorrt‘ has no attribute ‘BuilderFlag‘
  2. adb 由于目标计算机积极拒绝,无法连接
  3. torch转caffe
  4. 卷积神经网络「失陷」,CoordConv来填坑
  5. PMP-【第3章 项目管理过程】-2021-1-11(61页-87页)
  6. 远程连接linux虚拟网卡,Linux 虚拟机虚拟网卡问题导致无法连接问题
  7. python第一章测试题_第一章 测试【含答案】 Python大数据分析
  8. idea中自定义修改jdk源码,加注释
  9. vsftp账号_vsftp 实现不同用户不同权限配置
  10. ud分区删除工具_如何用DiskGenius对硬盘进行分区