Нельзя создать объект абстрактного класса в C++
Объект абстрактного класса создать нельзя: в типе остались методы без реализации.
Строка с локальной переменной базового абстрактного
типа не проходит компиляцию. Запишем такую попытку
для Shape:
class Shape {
public:
virtual ~Shape() {}
virtual int area() const = 0;
};
Попробуем создать объект абстрактного класса Shape:
int main() {
Shape shape;
return 0;
}
Компилятор сообщает, что класс абстрактный и
экземпляр Shape недопустим. Объект
нужно создавать у конкретного потомка:
class Shape {
public:
virtual ~Shape() {}
virtual int area() const = 0;
};
class Square : public Shape {
public:
int side;
Square(int side) : side(side) {}
int area() const override {
return side * side;
}
};
Создадим объект класса Square и выведем его площадь:
int main() {
Square square(5);
std::cout << square.area() << "\n";
return 0;
}
Попробуйте объявить локальную переменную
типа вашего абстрактного Figure
и убедитесь, что сборка останавливается.
Затем создайте объект Square
и выведите площадь.