为什么我们需要抽象类而不是虚拟类?

卡特罗奈

我知道这个主题有很多问题。但是,我无法理解使用抽象类而不是虚拟类的确切需求。如果我没有记错的话,抽象类也是隐式的虚拟类,它们之间的唯一区别是抽象方法必须在子类中被覆盖。那么,为什么虚拟课堂还不够?在什么情况下,我们确切需要抽象类而不是虚拟类?

轨道轻赛

首先,没有所谓的“虚拟阶级”。我假设您要说的是一个多态类(至少具有一个虚拟成员函数,当然还有一个虚拟析构函数)。

抽象类(那些至少具有一个纯虚拟成员函数的类)没有“需要”,但它们有助于创建无法实例化的接口,而只能提供一堆可重写的成员函数。如果实例化这样一个通用基类毫无用处或违背了设计师的意图,那么它允许您提供一个通用基类来辅助多态性。

/**
 * Instantiating `IType` cannot serve a purpose; it has
 * no implementation (although I _can_ provide one for `foo`).
 * 
 * Therefore, it is "abstract" to enforce this.
 */
struct IType
{
   virtual void foo() = 0;
   virtual ~IType() {}
};

/**
 * A useful type conforming to the `IType` interface, so that
 * I may store it behind an `IType*` and gain polymorphism with
 * `TypeB`.
 */
struct TypeA : IType
{
   virtual void foo() override {}
};

/**
 * A useful type conforming to the `IType` interface, so that
 * I may store it behind an `IType*` and gain polymorphism with
 * `TypeA`.
 */
struct TypeB : IType
{
   virtual void foo() override {}
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们不能在WCF中使用抽象类而不是接口?

来自分类Dev

为什么我们不能在Spring中将抽象类自动连接到具体类中?

来自分类Dev

为什么我们不能在Java中实例化一个抽象类?

来自分类Dev

我们可以创建抽象类的对象吗?

来自分类Dev

我们是否继承或实现抽象类?

来自分类Dev

为什么我们需要Java中的Properties类?

来自分类Dev

如果我们可以简单地重写超类的方法或使用抽象类,为什么还要使用接口?

来自分类Dev

Outputstream是一个抽象类,因此我们无法实例化它。为什么为Outputstream类提供了默认构造函数?

来自分类Dev

当我们仍然可以在抽象类中使用它们时,抽象属性的目的是什么?

来自分类Dev

为什么Abstract Factory使用抽象类而不是接口?

来自分类Dev

我们只能在 c# 中的接口类上使用抽象类的场景

来自分类Dev

如果包装器类已经不可变,为什么我们需要Atomic *类?

来自分类Dev

我们可以在php中创建没有抽象方法的抽象类吗?

来自分类Dev

为什么我们需要虚拟内存?

来自分类Dev

为什么我不能访问基本抽象类的属性?

来自分类Dev

为什么我的子类被视为抽象类?

来自分类Dev

为什么不同于类的其他成员,我们为什么需要定义类的静态变量?

来自分类Dev

我们可以使用反射调用抽象类的私有方法吗?

来自分类Dev

我们可以用具有扩展方法的接口替换抽象类吗?

来自分类Dev

我们如何确定方法是属于抽象类还是接口?

来自分类Dev

我们可以用具有扩展方法的接口替换抽象类吗?

来自分类Dev

为什么我们需要将Apply和Applicative类型类分开?

来自分类Dev

自定义异常类-我们为什么需要它?

来自分类Dev

为什么我们需要在famo.us中使用TransitionableTransform类?

来自分类Dev

为什么我们在python中的每个方法上都需要相应的类函数?

来自分类Dev

Android:扩展应用程序类。为什么我们需要实现单例模式?

来自分类Dev

为什么我们需要特定的类来处理请求和响应?

来自分类Dev

为什么我们应该使用类而不是记录,反之亦然?

来自分类Dev

为什么抽象类更好?

Related 相关文章

  1. 1

    为什么我们不能在WCF中使用抽象类而不是接口?

  2. 2

    为什么我们不能在Spring中将抽象类自动连接到具体类中?

  3. 3

    为什么我们不能在Java中实例化一个抽象类?

  4. 4

    我们可以创建抽象类的对象吗?

  5. 5

    我们是否继承或实现抽象类?

  6. 6

    为什么我们需要Java中的Properties类?

  7. 7

    如果我们可以简单地重写超类的方法或使用抽象类,为什么还要使用接口?

  8. 8

    Outputstream是一个抽象类,因此我们无法实例化它。为什么为Outputstream类提供了默认构造函数?

  9. 9

    当我们仍然可以在抽象类中使用它们时,抽象属性的目的是什么?

  10. 10

    为什么Abstract Factory使用抽象类而不是接口?

  11. 11

    我们只能在 c# 中的接口类上使用抽象类的场景

  12. 12

    如果包装器类已经不可变,为什么我们需要Atomic *类?

  13. 13

    我们可以在php中创建没有抽象方法的抽象类吗?

  14. 14

    为什么我们需要虚拟内存?

  15. 15

    为什么我不能访问基本抽象类的属性?

  16. 16

    为什么我的子类被视为抽象类?

  17. 17

    为什么不同于类的其他成员,我们为什么需要定义类的静态变量?

  18. 18

    我们可以使用反射调用抽象类的私有方法吗?

  19. 19

    我们可以用具有扩展方法的接口替换抽象类吗?

  20. 20

    我们如何确定方法是属于抽象类还是接口?

  21. 21

    我们可以用具有扩展方法的接口替换抽象类吗?

  22. 22

    为什么我们需要将Apply和Applicative类型类分开?

  23. 23

    自定义异常类-我们为什么需要它?

  24. 24

    为什么我们需要在famo.us中使用TransitionableTransform类?

  25. 25

    为什么我们在python中的每个方法上都需要相应的类函数?

  26. 26

    Android:扩展应用程序类。为什么我们需要实现单例模式?

  27. 27

    为什么我们需要特定的类来处理请求和响应?

  28. 28

    为什么我们应该使用类而不是记录,反之亦然?

  29. 29

    为什么抽象类更好?

热门标签

归档