Итераторская иерархия - PullRequest
0 голосов
/ 26 марта 2012

Какое наследование имеет больше смысла:

class SequentialIterator{ 
  SequentialIterator next(); 
};
class RandomAccessIterator : public SequentialIterator{
  RandomAccessIterator shift( int del );
};

или

class RandomAccessIterator {
  RandomAccessIterator shift( int del );
};
class SequentialIterator : public RandomAccessIterator{ 
  SequentialIterator next(); 
};

Если я скажу «производный класс дает более сложные функциональные возможности, чем базовый класс» (в первую очередь этоздесь даже смысл имеет смысл), что является более простой операцией: next или shift ?

РЕДАКТИРОВАТЬ: Я на самом деле разрабатываю интерфейсы для числовых последовательностей.

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Я полагаю, что сдвиг является более базовым, поскольку следующий выглядит как особый вид сдвига. Но немного странно думать, что SequentialIterator будет производным от RandomIterator и наоборот.

Я бы порекомендовал получить как из Iterator, так и затем поместить некоторые общие функции в класс IteratorHelper.

1 голос
/ 26 марта 2012

Я думаю, вы смотрите на это с неправильной стороны. В вашем первом фрагменте кода у вас есть три метода:

SequentialIterator.next()
RandomAccessIterator.next() // same as SequentialIterator.next()
RandomAccessIterator.shift(int)

Во втором у вас есть три метода, но они не одинаковые:

RandomAccessIterator.shift(int)
SequentialIterator.shift(int) // same as RandomAccessIterator.shift(int)
SequentialIterator.next()

При таком взгляде, я думаю, должно быть ясно, что только первая версия имеет смысл: класс RandomAccessIterator может разумно предложить метод next(), но класс SequentialIterator не может разумно предложить shift(int) способ.

(Это, конечно, предполагает, что есть какая-то причина, чтобы один из них наследовал от другого для начала.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...