ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 为什么我们不能创建抽象类的实例?

2019-10-06 19:07:50  阅读:195  来源: 互联网

标签:c oop abstract-class language-design


我在很多地方发现:

> Abstract Class是一个应该用作基类的类.
>抽象类是一个至少具有一个纯虚函数的类.

但有一件事总是让我想到的是为什么我们不能创建一个抽象类的实例?互联网上的许多地方都说创建一个实例是没有意义的,或者有人说它们应该被用作基类.但是为什么创建抽象类的实例会出错呢?

解决方法:

你的空栏()= 0;无效 – = 0表示法只能用于虚函数.

抽象类的重点是它是抽象的 – 你已经定义了一个接口而不是一个实现.如果没有实现,实例化类将不会产生有意义或有用的结果.如果确实/有意义地实例化该类的对象,那么您根本不想首先使用抽象类.

例如,考虑设备驱动程序.我们可能有一个抽象存储设备的驱动程序.我们为该设备定义了一些功能,例如读取和写入数据.该抽象类为任何想要读/写数据的代码提供了使用从该抽象类派生的具体类的能力.

我们不能只是实例化我们的抽象存储设备.相反,我们需要一个具体的对象,如拇指驱动器,磁盘驱动器等,以实际读取/写入.需要具体类,因为我们需要特定于实际设备的代码来执行我们在抽象基础中定义的命令.我们的抽象存储类只有读或写,但读或写,我们需要一个特定设备的驱动程序.人们可能知道如何与SATA硬盘驱动器通信,而另一个人知道如何与USB拇指驱动器通信,而第三个人知道如何读取或写入SD卡.但是,我们不能只说“我要创建一个抽象存储设备”,并且在没有定义将“写入”命令转换为(例如)通过SATA的正确信号的实际代码的情况下与它进行对话. ,USB,Firewire等,将数据传输到真正的驱动器上.

因此,尝试实例化我们的抽象类是没有意义的,并且是不允许的.我们只使用抽象基类,因此系统的其余部分可以统一处理所有设备.其余代码并不关心信号是如何彼此不同的 – 它只是看到一堆磁盘驱动器,并且可以与所有这些驱动器一起工作,即使通过USB读取数据的细节与读取完全不同在Firewire上(例如).

标签:c,oop,abstract-class,language-design
来源: https://codeday.me/bug/20191006/1861781.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有