⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iterator.cpp

📁 《Visual C++视频技术方案宝典》配套光盘
💻 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 + -