大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
封装一个Iterator类,提供方法访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
这样可以对同一个聚合同时有多个遍历。

#include <iostream>

using namespace std;

//封装了一个int数组
class Aggregate
{
public:
    Aggregate(
int is):size(is)
    
{
        i 
= new int[size];
        
while(is>0)
        
{
            i[size
-is= size-is;
            
--is;
        }

    }

    
~Aggregate(){delete i;}
    
int GetSize() const {return size;}
    
int GetItem(int index) const {return i[index];}
private:
    
int size;
    
int* i;
}
;

//遍历Aggregate的迭代器
class Iterator
{
public:
    Iterator(Aggregate
* p):pa(p),index(0){}
    
void Start()
    
{
        index 
= 0;
    }

    
bool IsEnd() const
    
{
        
return index==pa->GetSize()-1;
    }

    
void Previous()
    
{
        
if(index > 0)
            
--index;
    }

    
void Next()
    
{
        
if(index < pa->GetSize()-1)
            
++index;
    }

    
int GetValue() const
    
{
        
return pa->GetItem(index);
    }


private:
    
int    index;
    Aggregate
* pa;
}
;


int main()
{
    Aggregate
* pa = new Aggregate(5);
    Iterator
* pi = new Iterator(pa);
    
    
//最后一个未输出
    while(!pi->IsEnd())
    
{
        cout
<<pi->GetValue()<<endl;
        pi
->Next();
    }


    delete pi;
    delete pa;
    
return 0;
}
posted on 2009-06-10 10:38 大胖 阅读(129) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理