这是我的通用数组头文件:
#ifndef ARRAY_H
#define ARRAY_H
#include "Number.h"
#include "Iterator.h"
//array is contius memory of numbers
class Array{
protected:
//array has some contius cell of memory each include the data
class Cell{
public:
Number* m_data;
//c'tor:(inline)
Cell(Number* num=NULL): m_data(num){};
//D'tor (inline)
~Cell(){};
};
//composition class of iterator:
class ArrayIterator:public Iterator{
public:
Cell* m_current;
//C'tor:(inline)
ArrayIterator(Cell* cell):m_current(cell){};
//D'tor:
~ArrayIterator(){};
//is there any next numbers
bool hasNext()const;
//is there any prev numbers
bool hasPrev()const;
//returning the current and getforward
Number& next();
//returning the current and getback
Number& prev();
};
Cell* m_head,*m_last;
public:
//C'tor:
Array(const int amount);
//D'tor:
virtual ~Array(){delete[]m_head;};
//Random access operator:
Number& operator [] (const int i)const{return *m_head[i].m_data;};
};
#endif
将Number和Iterator视为抽象类,Number表示通用数字。
我的问题:如何在ArrayIterator中实现hasNext(),因为ArrayIterator是一个组合类,它不“知道”数组的大小
答案 0 :(得分:1)
要实施hasNext()
和hasPrev()
方法,ArrayIterator
需要知道迭代的当前Array
的边界位置。
这可以通过在Cell* m_head,*m_last
中存储m_current
和ArrayIterator
,或者通过存储指向Array
对象的指针并安排{{1}来完成有权访问ArrayIterator
对象的m_head
和m_last
。在任何一种情况下,您都需要在Array
。