其他分享
首页 > 其他分享> > c – 为什么我们不能创建抽象类的实例?

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

作者:互联网

我在很多地方发现:

> 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