Commit aa3ae867 by Szeberényi Imre

const_iterator kommentek

parent c68a49e6
...@@ -57,7 +57,7 @@ public: ...@@ -57,7 +57,7 @@ public:
/// létrehoz egy konstans objektumra alkalmazható iterátort és az elejére állítja /// létrehoz egy konstans objektumra alkalmazható iterátort és az elejére állítja
/// @return - iterátor az adatsorozat elejére /// @return - iterátor az adatsorozat elejére
const_iterator begin() const { const_iterator begin() const {
return const_iterator(*this); // ld. iterátor konstruktor return const_iterator(*this);// ld. iterátor konstruktor
} }
/// létrehoz egy iterátort és az utolsó elem után állítja /// létrehoz egy iterátort és az utolsó elem után állítja
...@@ -126,13 +126,13 @@ public: ...@@ -126,13 +126,13 @@ public:
/// egyenlőtlenség vizsgálat /// egyenlőtlenség vizsgálat
/// @param i - jobboldali operandus /// @param i - jobboldali operandus
bool operator!=(const iterator &i) { bool operator!=(const iterator &i) const {
return(idx != i.idx); return(idx != i.idx);
} }
/// egyenlőség vizsgálat /// egyenlőség vizsgálat
/// @param i - jobboldali operandus /// @param i - jobboldali operandus
bool operator==(const iterator &i) { bool operator==(const iterator &i) const {
return !operator!=(i); return !operator!=(i);
} }
...@@ -143,14 +143,17 @@ public: ...@@ -143,14 +143,17 @@ public:
} }
/// Szelekció pointerrel (nyíl). Címet kell, hogy adjon. /// Szelekció pointerrel (nyíl). Címet kell, hogy adjon.
T* operator->() { T* operator->() const {
return &operator*(); return &operator*();
} }
}; // iterator osztály vége }; // iterator osztály vége
/// const_iterator osztály /// const_iterator osztály.
/// Visszavezetjük az iterator osztályra. /// Visszavezetjük az iterator osztályra.
/// A kompatibilitas miatt azonban a conts_itarator betehető egy itaratorba, így
/// a kontans objektum adata is elérhetővé válik balértékként is.
/// Privat öröklés jobb megoldás lenne, úgy azonban minden tagfüggvényt az ősből delegálni kell.
class const_iterator : public iterator { class const_iterator : public iterator {
public: public:
/// default konstruktor /// default konstruktor
...@@ -160,10 +163,12 @@ public: ...@@ -160,10 +163,12 @@ public:
/// @param a - a konkrét objektum /// @param a - a konkrét objektum
/// @param ix - ide állítja az indexet /// @param ix - ide állítja az indexet
const_iterator(const Array& a, size_t ix = 0) const_iterator(const Array& a, size_t ix = 0)
: iterator(const_cast<Array&>(a), ix) {} /// Kis trükközés a kasztolással... : iterator(const_cast<Array&>(a), ix) {} /// Kis trükközés a kasztolással: Levesszük a
/// konstans attribútumot, de nem fogjuk írni.
const T& operator*() const { /// indirekció
return iterator::operator*(); const T& operator*() const { /// Ezen keresztül biztosan nem fogjuk írni, de sajnos a kompatibilitás
return iterator::operator*(); /// miatt egy const_itarator -> itarator konverzió nem kerül semmibe...
} }
/// Szelekció pointerrel (nyil). Címet kell, hogy adjon. /// Szelekció pointerrel (nyil). Címet kell, hogy adjon.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment