Когда я читаю о наследовании, я всегда смущен некоторым примером.
Обычно существует пример, аналогичный приведенному ниже примеру.
class Shape
{
public:
Shape() {}
virtual ~Shape () {}
virtual void Draw() = 0;
};
class Cube : public Shape
{
public:
Cube(){}
~Cube(){}
virtual void Draw();
};
Shape* newCube = new Cube();
newCube->Draw();
Мой вопрос в том, почему ответственность за Shape
лежит на себе? Разве не должно быть, чтобы класс рендеринга знал, как рисовать фигуру и вместо этого предоставлять форму рендереру? Что делать, если мы хотим записать изменения в измерениях? И т.д? Будет ли у нас метод для каждой из этих различных задач внутри Shape
?
Видя многочисленные примеры, подобные этим, иногда заставляют меня задуматься о моей способности назначать обязанности классам. Есть ли что-то, что я не понимаю в классах, которые несут одну ответственность?