Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Środa, 18 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Przykład (model danych z iteratorem)

Aby umożliwić klasie ModelDanych korzystanie z iteratorów należy zbudować nowa klasę Iterator (zwykle będącą publiczną klasą wewnętrzną kontenera) i udostępnić mechanizm pobierania egzemplarza tej klasy.

Deklaracja klasy ModelDanych zmieni się więc następująco:

class ModelDanych {
public:
	// (...)

	class iterator {
	private:
		iterator (const std::map<int, double> & model);
	public:
		int x() const;
		double y() const;
		void nastepny ();
		bool czyKoniec () const;
	private:
		typedef std::map<int, double> TypModelu;
		const TypModelu &s_model;
		TypModelu::const_iterator s_iter;

		friend class ModelDanych;
	};

	iterator pobierzIterator() const;
private:
	std::map<int, double> s_impl;
};

Odnośnie powyższej deklaracji należy się kilka uwag. Przede wszystkim – konstruktor Iteratora jest prywatny, a więc użytkownik nie może samodzielnie utworzyć jego egzemplarza. Ponieważ klasa Iterator deklaruje przyjaźń z klasą ModelDanych to właśnie ta druga poprzez metodę pobierzIterator() realizuje na żądanie tworzenie iteratora. Poza tym argumentem konstruktora nie jest referencja do klasy ModelDanych, ale do klasy std::map<int, double>. W przypadku referencji do klasy ModelDanych należałoby bowiem deklarować dodatkowo przyjaźń do klasy Iterator w klasie ModelDanych, aby ta mogła skorzystać ze składnika s_impl.

W sekcji publicznej metody iterator znajduje się komplet standardowych metod iteratora: metody pobierania wartości (metoda x() oraz y()), przechodzenia do następnego elementu (metoda nastepny()) oraz sprawdzania czy iterator osiągnął koniec kontenera (metoda czyKoniec()). Jest to standardowa, minimalna postać interfejsu iteratorów.

Sekcja prywatna zawiera dwie składowe – referencje do wewnętrznej struktury modelu danych (std::map<int, double>) inicjalizowaną przez konstruktor oraz iterator mapy służący do utrzymywania bieżącej pozycji w mapie.

Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11