Является ли абстрактный класс тем же, что и базовый класс?

Является ли абстрактный класс тем же, что и базовый класс?

Иногда я вижу термин «базовый класс», но когда я смотрю, что он означает, я склоняюсь к тому, чтобы увидеть «абстрактный класс».

Это просто два слова, которые означают одно и то же?

0

Решение

Это типичный базовый класс 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;
};
2

Другие решения

Одно практическое отличие заключается в том, что вы не могу создавать объекты абстрактного базового класса, тогда как вы Можно создавать объекты неабстрактного базового класса. Эта разница почти достаточно для меня, чтобы решить, когда использовать какой. 🙂

1