Является ли абстрактный класс тем же, что и базовый класс?
Иногда я вижу термин «базовый класс», но когда я смотрю, что он означает, я склоняюсь к тому, чтобы увидеть «абстрактный класс».
Это просто два слова, которые означают одно и то же?
Это типичный базовый класс 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;
};
Одно практическое отличие заключается в том, что вы не могу создавать объекты абстрактного базового класса, тогда как вы Можно создавать объекты неабстрактного базового класса. Эта разница почти достаточно для меня, чтобы решить, когда использовать какой. 🙂