【问题标题】:Is an Abstract Class the same thing as a Base Class?抽象类和基类一样吗?
【发布时间】:2015-03-28 05:25:48
【问题描述】:

抽象类和基类一样吗?

我偶尔会看到“基类”一词,但当我查找它的含义时,我倾向于看到“抽象类”。

它们只是意思基本相同的两个词吗?

【问题讨论】:

  • 可以有抽象基类和非抽象基类。
  • 没有。抽象类始终是基类,反之则不然。

标签: c++ oop abstract-class base-class abstract-base-class


【解决方案1】:

一个实际的区别是您不能创建抽象基类的对象,而您可以创建非抽象基类的对象。这种差异几乎足以让我决定何时使用哪个。 :)

【讨论】:

    【解决方案2】:

    这是一个典型的基类 Polygon:

    class Polygon {
      protected:
        int width, height;
      public:
        void set_values (int a, int b)
          { width=a; height=b; }
        virtual int area ()
          { return 0; }
    };
    
    class Rectangle: public Polygon {
      public:
        int area ()
          { return width * height; }
    };
    
    class Triangle: public Polygon {
      public:
        int area ()
          { return (width * height / 2); }
    };
    

    抽象基类与前面示例中的 Polygon 类非常相似。它们是只能用作基类的类(不能实例化它们),因此允许具有没有定义的虚成员函数(称为纯虚函数)。语法是将它们的定义替换为 =0(以及等号和零):

    一个抽象的 Polygon 基类可能如下所示:

    // abstract class CPolygon
    class Polygon {
      protected:
        int width, height;
      public:
        void set_values (int a, int b)
          { width=a; height=b; }
        virtual int area () =0;
    };
    

    【讨论】:

    • 那么virtual int area () =0;究竟有什么作用呢?什么时候适用?
    • 表示基类中没有它的实现,所有从基类派生的类都必须实现int area(),否则你的代码甚至无法编译
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2013-01-20
    相关资源
    最近更新 更多