抽象类与基类是一样的吗?

时间:2015-01-29 04:31:36

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

抽象类与基类相同吗?

我偶尔会看到基类这个术语,但当我查看它的含义时,我倾向于看到"抽象类"扔了。

他们只是两个词,意思是基本相同吗?

2 个答案:

答案 0 :(得分: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;
};

答案 1 :(得分:1)

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