gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:34:21 32 4
gpt4 key购买 nike

我在很多地方发现:

  • 抽象类是应该用作基类的类。
  • 抽象类是具有至少一个纯虚函数的类。

但是我一直在想的一件事是为什么我们不能创建一个抽象类的实例?网上很多地方都说创建实例没有意义,或者有的说应该作为基类使用。但是为什么创建抽象类的实例会出错呢?

最佳答案

您的 void bar()=0; 无效——=0 符号只能与虚函数一起使用。

抽象类的全部意义在于它是抽象的——您已经定义了一个接口(interface)而不是一个实现。如果没有实现,实例化该类将不会产生有意义或有用的结果。如果实例化该类的对象确实/有意义,那么您根本不想首先使用抽象类。

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

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

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

关于c++ - 为什么我们不能创建抽象类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131567/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com