Метод странного интерфейса для точечного итератора

Я должен перебирать определенные точки прямоугольника по периметру (в некоторых случаях мне нужно перебирать одну строку этого прямоугольника, в других случаях мне нужно перебирать весь прямоугольник). У меня есть интерфейс PointIterator.

struct Point
{
   double x,y
}
class PointIteratorI
{
     virtual void next() =0;
     virtual void isOver() =0;
     virtual Point& getPoint() = 0;
}

в случае итерации по одной строке

class LineIterator:public PointIterator
{
....
}

в случае итерации по периметру прямоугольника

class PerimeterIterator:public PointIterator
{
   ....
}

В случае LineIterator мне также нужен тип линии (горизонтальная или вертикальная, прямоугольник имеет 2 горизонтальные и 2 вертикальные линии). Но интерфейс типа "getLineType" является странным для типа LineIterator. Кажется, что этот метод не для этого класса. Потому что в таком случае класс LineIterator будет отвечать за итерацию и направление. Это нарушает принцип единой ответственности.

Я думал для другого интерфейса как

class LineObjectI
{
 public:
    virtual LineType getLineType() = 0;
    .....
}
class LineIterator:public PointIterator, public LineObjectI
{
protected:
    virtual  LineType getLineType() = 0;
....
}

для сокрытия этого интерфейса. Я хочу знать, есть ли лучший способ проверить тип линии на LineIterator.

Ответы на вопрос(1)

Ваш ответ на вопрос