Commit 2cd4fd28 by Szeberényi Imre

const_iterator

parent e1aecbfc
......@@ -3,6 +3,8 @@
*
* Generikus tömb iterátorral v3.
* Előadáson bemutatott kód módosított változata.
* Interfész jobban hasonlít az std::vector-ra.
* Van konstans iterarora is.
*/
#ifndef GEN_ARRAY_ITER3
#define GEN_ARRAY_ITER3
......@@ -21,6 +23,7 @@ class Array {
public:
/// minden implicit tagfüggvény jó, nem kell átdefiniálni
class iterator; // elődeklaráció
class const_iterator; // konstans objektumra hivatkozó iterator elődeklarációja
/// default és konstans értékkel feltöltő konstruktor
/// @param n - méret
......@@ -51,6 +54,18 @@ public:
return iterator(*this, siz);// ld. iterátor konstruktor
}
/// létrehoz egy konstans objektumra alkalmazható iterátort és az elejére állítja
/// @return - iterátor az adatsorozat elejére
const_iterator begin() const {
return const_iterator(*this); // ld. iterátor konstruktor
}
/// létrehoz egy iterátort és az utolsó elem után állítja
/// @return - iterátor az adatsorozat végére
const_iterator end() const {
return const_iterator(*this, siz);// ld. iterátor konstruktor
}
/// Elemek tényleges száma
/// @return - ténylegesen tárolt elemek száma
size_t size() const { return siz; }
......@@ -134,6 +149,30 @@ public:
}; // iterator osztály vége
/// const_iterator osztály
/// Visszavezetjük az iterator osztályra.
class const_iterator : public iterator {
public:
/// default konstruktor
const_iterator() {}
/// konstruktor, egy konkrét objektum ix-edik elemére mutat
/// @param a - a konkrét objektum
/// @param ix - ide állítja az indexet
const_iterator(const Array& a, size_t ix = 0)
: iterator(const_cast<Array&>(a), ix) {} /// Kis trükközés a kasztolással...
const T& operator*() const {
return iterator::operator*();
}
/// Szelekció pointerrel (nyil). Címet kell, hogy adjon.
const T* operator->() const {
return &operator*();
}
};
/// Virtuális destruktor.
/// Most nem használjuk, de egy generikus osztály későbbi
/// felhasználási módja kevésbé látszik.
......
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