迭代器层次结构

时间:2012-03-26 19:06:36

标签: oop class inheritance

哪种继承更有意义:

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

编辑:我实际上是在为数字序列设计接口。

2 个答案:

答案 0 :(得分:1)

我认为你是从错误的方向看这个。在您的第一个代码段中,您基本上有三种方法:

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)方法。

(当然,这是假设有一些理由让其中一个从另一个继承而开始。)

答案 1 :(得分:1)

我认为转变更为基础,因为下一步似乎是一种特定的转变。但是认为SequentialIterator是从RandomIterator派生的,反之亦然,这有点奇怪。

我建议从Iterator中派生两者,然后将一些常用功能放入IteratorHelper类中。