📄 iterator.cpp
字号:
// Iterator.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "ostream.h"
//定义抽象迭代子类
class CIterator
{
public:
virtual void First()=0;
virtual void Next() = 0;
virtual void Prev() = 0;
virtual void Last() = 0;
virtual bool IsLast() = 0;
virtual int GetCurrent() = 0;
};
class CAggregate
{
public:
virtual int GetCount() = 0;
virtual CIterator* CreateIterator() = 0;
virtual ~CAggregate()
{
}
};
class CDetailIterator ;
class CDetailAgg : public CAggregate
{
private:
int* m_Elements;
int m_Size;
public:
friend class CDetailIterator;
CDetailAgg()
{
m_Size = 5;
m_Elements = new int[m_Size];
for(int i = 0 ; i<m_Size; i++)
{
m_Elements[i] = i;
}
}
virtual CIterator* CreateIterator();
virtual int GetCount()
{
return m_Size;
}
virtual ~CDetailAgg()
{
int a = 10;
delete[] m_Elements;
}
};
class CDetailIterator : public CIterator
{
private:
CDetailAgg* m_Agg;
int m_Index;
public:
CDetailIterator(CDetailAgg* Agg)
{
m_Agg = Agg;
m_Index = 0;
}
virtual void First()
{
m_Index = 0;
}
virtual void Next()
{
if (m_Index< m_Agg->GetCount()-1)
m_Index++;
}
virtual void Prev()
{
if (m_Index>0)
m_Index--;
}
virtual void Last()
{
m_Index = m_Agg->GetCount()-1;
}
virtual bool IsLast()
{
return ((m_Index ==m_Agg->GetCount()-1)? true:false) ;
}
virtual int GetCurrent()
{
return m_Agg->m_Elements[m_Index];
}
};
CIterator* CDetailAgg::CreateIterator()
{
return new CDetailIterator(this);
}
class CClient
{
private:
CAggregate* pAgg;
public:
CClient()
{
pAgg = new CDetailAgg;
}
void Operate()
{
CIterator* pIterator = pAgg->CreateIterator();
while (!pIterator->IsLast())
{
cout<< pIterator->GetCurrent()<< '\n';
pIterator->Next();
}
delete pIterator;
}
virtual ~CClient()
{
delete pAgg;
}
};
int main(int argc, char* argv[])
{
CClient Client;
Client.Operate();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -