目录

零、引言

一、什么是抽象类?

二、什么是接口?

三、抽象类和接口的区别

四、应用场景


零、引言

C++中的抽象类和接口都是用于实现面向对象编程中的多态性,即允许不同的对象以相同的方式进行处理。虽然它们的目的相同,但是它们之间还是有一些区别。

一、什么是抽象类?

抽象类是一种特殊的类,它不能被直接实例化,只能作为基类来派生新的类。抽象类通常用来定义一组接口方法,但是这些方法并没有实际的实现。它们的实现是由派生类来完成的。

在C++中,抽象类通常包含至少一个纯虚函数。纯虚函数是一种特殊的虚函数,它没有实际的实现,只是用来定义接口。如果一个类中包含了纯虚函数,那么这个类就成为了抽象类。

抽象类的语法如下:

class Base {
public:virtual void foo() = 0;  // 纯虚函数
};

注意到,纯虚函数在声明时以 "=0" 结尾,这表示它是一个纯虚函数,没有实际的实现。任何继承自抽象类的派生类,都必须实现基类中的所有纯虚函数,否则这个派生类也将成为抽象类。

下面是一个抽象类的例子:

class Shape {
public:virtual void draw() = 0; // 纯虚函数virtual double area() { return 0.0; } // 虚函数,提供默认实现void setColor(const string& color) { m_color = color; } // 非虚函数
private:string m_color;
};

在上面的例子中,Shape 类包含了一个纯虚函数 draw() 和一个虚函数 area(),同时还包含了一个非虚函数 setColor()。由于 Shape 类中包含了纯虚函数,因此它是一个抽象类,不能被实例化。

抽象类不能定义对象,但是抽象类可以定义指针。

二、什么是接口?

接口是一组规范的行为,它可以被多个类实现,从而实现多态性。在C++中,接口通常通过定义纯虚函数来实现。

和抽象类不同,接口只包含纯虚函数,没有任何数据成员。接口的主要目的是为实现某个具体功能提供一组规范的接口,这样就可以在不同的实现中使用相同的接口来处理数据。

接口的语法如下:

class Interface {
public:virtual void foo() = 0;  // 纯虚函数
};

下面是一个接口的例子:

class Drawable {
public:virtual void draw() = 0; // 纯虚函数
};

在上面的例子中,Drawable 类只包含了一个纯虚函数 draw(),它没有任何成员变量和成员函数的实现。派生类必须实现 draw() 函数,否则也会变成一个抽象类。

三、抽象类和接口的区别

抽象类和接口的区别在于:

1、抽象类可以包含成员变量和成员函数,并可以提供一些默认实现,而接口只包含纯虚函数,没有任何成员变量和成员函数的实现。

2、抽象类可以用作其他类的基类,而接口只能用于描述类的行为。

3、派生类必须实现接口中的所有函数,否则也会成为一个抽象类,而抽象类中可以有一些非纯虚函数不需要派生类实现。

四、应用场景

在实际应用中,抽象类和接口通常用于不同的情况。抽象类用于描述一组相关的类,其中包含一些公共的成员变量和成员函数,而接口用于描述一组相关的行为,其中包含一组规范的函数集合。

举例来说,假设我们要实现一个图形绘制程序,其中包含多种形状,例如圆形、矩形、三角形等。这些形状都具有一些共同的属性,例如颜色、位置等,因此可以将它们抽象为一个抽象类 Shape,其中包含一些公共的成员变量和成员函数。然后可以派生出具体的形状类,例如 Circle、Rectangle、Triangle 等,这些派生类必须实现 Shape 类中的纯虚函数 draw(),从而实现绘制具体的形状。

另外,可以定义一个接口 Drawable,用于描述所有可绘制的对象,其中包含一个纯虚函数 draw()。然后可以让所有实现 Drawable 接口的类都可以被绘制。例如,如果我们还要实现一个文本框控件,它也可以实现 Drawable 接口,从而可以被绘制。

C++基础知识【7】抽象类和接口相关推荐

  1. C++基础篇之抽象类的接口

    C++基础篇之抽象类的接口 接口描述了类的行为和功能,而不需要完成类的特定实现. C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念. 如果类 ...

  2. 计算机io接口主要功能,计算机基础知识2:IO接口及电源介绍.ppt

    <计算机基础知识2:IO接口及电源介绍.ppt>由会员分享,可在线阅读,更多相关<计算机基础知识2:IO接口及电源介绍.ppt(18页珍藏版)>请在人人文库网上搜索. 1.I/ ...

  3. 微机原理和计算机硬件基础知识,微机原理与接口技术

    微机原理与接口技术 (2010年清华大学出版社出版的图书) 语音 编辑 锁定 讨论 上传视频 <微机原理与接口技术>是2010年8月1日清华大学出版社出版的图书,作者是姚琳.孙志辉.韩伯涛 ...

  4. Java基础篇:抽象类与接口

    1.抽象类和接口的定义: (1)抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类. (2)接口是抽象方法的集合,声明了一系列的方法操作,自身并不能做任何事情.如 ...

  5. Android开发之Java基础面试题抽象类和接口的区别

    抽象类和接口的区别? 三个方面说: 1.成员特点: 抽象类:成员变量,可以是变量也可以是常量成员方法:可以是抽象方法,也可以是非抽象方法构造方法:有构造方法接口:成员变量,只有常量没有构造方法成员方法 ...

  6. 【JAVA基础篇】抽象类和接口的区别

    抽象类和接口是定义抽象概念的两种方式,正是由于抽象类和接口,才赋予了Java强大的面向对象的能力.在讨论他们的不同点之前,我们先来了解抽象类和接口. 抽象类 在面向对象的领域一切事物都是对象.对象都是 ...

  7. Java基础---多态、抽象类、接口

    2015-4-4 一.多态 1.定义:某一个事物,在不同时刻表现出来的不同状态. 2.多态的前提与体现: (1)要有继承关系: (2)要进行方法的重写: (3)要父类引用指向子类对象. 3.成员访问特 ...

  8. Java基础 实验四 抽象类和接口

    一.实验内容 1.定义一个抽象类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类,这两个类都用getArea()方法计算对象的面积.编写应用程序 ...

  9. 【python基础知识】调用C++接口(setup.py运行)出现的各种问题

    1.setup.py文件编写 网上下载的C++程序的Python接口,不会使用,全靠摸索.根据最近出现的问题,写下其中的道道,避免下一次抓狂. setup.py文件内容如下: from distuti ...

  10. 由巨型计算机到微型计算机,微机原理第一章节:基础知识.ppt

    微机原理第一章节:基础知识 * * * * * * * * * * * * * * * * * * * * * * * * 微型计算机原理 与接口技术 中原工学院电子信息学院 (电子教案) 总 目 录 ...

最新文章

  1. 和李洪强一起学设计01 PS第一天
  2. 皮一皮:爱迪生看了流泪,特斯拉看了沉默...
  3. 如何更改自己电脑上的COM端口号
  4. mysql8.0.17下载教程_mysql 8.0.17 安装配置图文教程
  5. VBScript是什么?有什么优缺点?
  6. 无心剑中译叶芝诗17首
  7. 4.5 NiN CNN、tensorflow实现——python实战
  8. 微软终于屈服和妥协:宣布加入 OpenJDK,贡献构建Java生态
  9. centos7更改引导项等待时间
  10. 【rmzt】美女杨颖win7主题_8.5
  11. 学习一下企业管理信息化建设的“诺兰模型”
  12. android手机密码忘了哪个电话打开,如果手机锁屏密码忘记了怎么办_安卓手机锁屏密码忘了的处理办法-系统城...
  13. React Native 中使用图标
  14. Identifying Antioxidant Proteins by Using Optimal Dipeptide Compositions论文笔记
  15. 1080p和1080i
  16. 微信开放平台开发第三方授权登陆(三):Android客户端
  17. 外贸找客户软件:Yellow Page Spider 8.7.1 Crack
  18. “龙芯杯”——全国大学生计算机系统能力培养大赛
  19. 《Spring系列》第15章 声明式事务(一) 基础使用
  20. 小程序(十六)小程序仿微信聊天页面及功能

热门文章

  1. 山东大学陈强教授的介绍及相关资源
  2. 控制台命令设置最大帧数/帧率
  3. 员工跳槽面试美团,两次面试通过却被offer审核放鸽子,结果蒙了
  4. 关于mybatis中下下划线字段查出为null
  5. 百度云服务器试用体验
  6. JavaScript 进阶 31 -- 简单来说下vue.js 数据监测observe的实现的原理
  7. 高校各系爆强爱情短信
  8. 拉力赛_vijos1460_LCA
  9. 最简单的AR开发入门教程(一)
  10. Java互联网架构-Mysql分库分表订单生成系统实战分析