2012-03-26 115 views
0

哪個繼承更有意義:迭代層次

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

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

如果我說「派生類提供了比基類更復雜的功能」(首先是連做這個聲明意義在這裏),這是更基本的操作:下一個轉變

編輯:實際上,我設計的接口爲數字序列。

回答

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

我相信轉變是更基本的是未來似乎是一個特定類型的轉變。但是認爲SequentialIterator會從RandomIterator派生,反之亦然,這有點奇怪。

我會建議無論是從迭代器,然後把一些常用的功能集成到一個IteratorHelper類派生。