Классический объектно-ориентированный подход даёт проектировщику чёткое руководство, как это делать.
Прежде всего, в предметной области следует найти ключевые абстракции. Различные учебники по ООП пишут, что для графического редактора ключевой абстракцией является фигура.
Затем следует установить взаимосвязи между ключевыми абстракциями. Если взаимосвязь можно выразить отношением is-a, то такие абстракции следует связать при помощи наследования. Если взаимосвязь подходит под отношение has-a, то такие абстракции следует связать при помощи агрегации.
Для графического редактора абстрактную фигуру можно связать отношением наследования с конкретными фигурами: прямоугольником, эллипсом, треугольником и т.п.
Получается стройная и логичная картина:
class Figure;
class Rectangle : public Figure;
class Ellipse : public Figure;
class Triangle : public Figure;
К сожалению, она не позволяет создать редактор, который хоть в какой-то мере удовлетворяет потребностям пользователя.