#include <iostream>
#include <map>
using namespace std;

namespace sf
{
	class Sprite
	{
	public:
		void introduceYourself() const
		{
			cout<<"Sprite\n";
		}
	};
	
	class Sound
	{
	public:
		void introduceYourself() const
		{
			cout<<"Sound\n";
		}
	};
}

class CResource
{
public:
	virtual ~CResource() {}
	virtual void doSomething() const = 0;
};

class CSound : public CResource
{
public:
	void doSomething() const
	{
		sound.introduceYourself();
	}
	
private:
	sf::Sound sound;
};

class CSprite : public CResource
{
public:
	void doSomething() const
	{
		sprite.introduceYourself();
	}
	
private:
	sf::Sprite sprite;
};

class CResourceManager
{
public:
	CResourceManager()
	{
		resourcesMap[0] = new CSprite;
		resourcesMap[1] = new CSprite;
		resourcesMap[2] = new CSound;
		resourcesMap[3] = new CSound;
		resourcesMap[4] = new CSprite;
	}
	~CResourceManager()
	{
		for( const auto &res : resourcesMap )
			delete res.second;
	}
	
	void printResources()
	{
		for( const auto &res : resourcesMap )
			res.second->doSomething();
	}
	
private:
	map<int, CResource*> resourcesMap;
	
};

int main() {
	CResourceManager resMngr;
	
	resMngr.printResources();
	return 0;
}