我有一个任务,需要编写自己的容器Linked_list
和Array_list
。我为它们设计了一个接口:
typedef int value_type;
class Container
{
public:
class Iterator
{
public:
Iterator();
Iterator(value_type* other);
Iterator(const Iterator& other);
Iterator& operator=(const Iterator& other);
...
};
Container();
Container(const Container& other);
~Container();
virtual value_type& front() const=0;
virtual value_type& back() const=0;
virtual Iterator begin() const=0; //
...
};
我创建了派生类 Linked_list 和 Array_list:
class Linked_list:public Container
{
public:
long int cur_size;
List elem;
static Link end_;
class Iterator: public Container::Iterator
{
friend Linked_list;
Link *p;
};
Iterator begin() const; //overriding virtual function return type differs ...
...
}
我认为这完全是错的。嵌套类Linked_list::Iterator
应该是一个派生类吗?如果我不能改变接口,这可行吗?
typedef int value_type;
吗?这样你就可以通过将其更改为template <class value_type>
并将派生类更改为模板的特定类型来使其成为一个模板。 - DjSolLinked_list
中begin
的覆盖无效,因为返回类型不同且也不能作为协变返回类型接受(需要是指针才行)。 - Bart van Ingen Schenau