Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:jimp2:2017:labs:dziedziczenie [2018/04/21 15:59]
mwp [Ćwiczenia]
pl:dydaktyka:jimp2:2017:labs:dziedziczenie [2018/04/23 19:10]
mwp [Zadanie domowe:]
Linia 525: Linia 525:
     * <code cpp>bool NotEquals(const IterableIterator &​other)</​code>​ - odpowiada operacji //it != other//, jej implementacja w klasie pochodnej powinna zwracać prawdę jeśli iterator other wskazuje na ten sam element sekwencji (względnem jego indeksu w sekwencji, a nie tylko jego wartości zwracanej przez //​Dereference()//​).     * <code cpp>bool NotEquals(const IterableIterator &​other)</​code>​ - odpowiada operacji //it != other//, jej implementacja w klasie pochodnej powinna zwracać prawdę jeśli iterator other wskazuje na ten sam element sekwencji (względnem jego indeksu w sekwencji, a nie tylko jego wartości zwracanej przez //​Dereference()//​).
     * Destruktor - jako jedyna metoda w tej klasie powinien mieć domyślną implementację,​ najlepiej skorzystać z pomocy kompilatora i kazać mu ją wygenerować (= defualt). ​     * Destruktor - jako jedyna metoda w tej klasie powinien mieć domyślną implementację,​ najlepiej skorzystać z pomocy kompilatora i kazać mu ją wygenerować (= defualt). ​
-  - **rozgrzewka** Należy zaimplementować klasę pochodną dla **IterableIterator**,​ a mianowicie: **ZipperIterator**,​ zipper iterator powinien być w stanie przeiterować po dwóch wektorach na raz, biorąc po kolei pierwszy element z pierwszego wektora i pierwszy element z drugiego wektora, drugi element z pierwszego i drugi element z drugiego, itd.. Najłatwiej to zrobić jeśli ZipperIterator będzie posiadał po dwa const iteratory do początu i końca obu wektorów. Wtedy Derefencja, Next i NotEquals są bardzo proste w implementacji. (Testy wymagają konstuktora postaci: <code cpp>​explicit ZipperIterator(std::​vector<​int>::​const_iterator ​left+  - **rozgrzewka** Należy zaimplementować klasę pochodną dla **IterableIterator**,​ a mianowicie: **ZipperIterator**,​ zipper iterator powinien być w stanie przeiterować po dwóch wektorach na raz, biorąc po kolei pierwszy element z pierwszego wektora i pierwszy element z drugiego wektora, drugi element z pierwszego i drugi element z drugiego, itd.. Najłatwiej to zrobić jeśli ZipperIterator będzie posiadał po dwa const iteratory do początu i końca obu wektorów. Wtedy Derefencja, Next i NotEquals są bardzo proste w implementacji. (Testy wymagają konstuktora postaci: <code cpp>​explicit ZipperIterator(std::​vector<​int>::​const_iterator ​left_begin
-                 ​std::​vector<​std::​string>::​const_iterator ​right,+                 ​std::​vector<​std::​string>::​const_iterator ​right_begin,
                  ​std::​vector<​int>::​const_iterator left_end,                  ​std::​vector<​int>::​const_iterator left_end,
                  ​std::​vector<​std::​string>::​const_iterator right_end);</​code>​                  ​std::​vector<​std::​string>::​const_iterator right_end);</​code>​
Linia 536: Linia 536:
       * <code cpp>​IterableIteratorWrapper &​operator++()</​code>​ - powinna wywoływać Next na polu składowym       * <code cpp>​IterableIteratorWrapper &​operator++()</​code>​ - powinna wywoływać Next na polu składowym
     - przygotować klasę bazową Iterable o następujących metodach (zastanowić się, które z tych funkcji muszą być typu const):     - przygotować klasę bazową Iterable o następujących metodach (zastanowić się, które z tych funkcji muszą być typu const):
-      * <code cpp>​std::​unique_ptr<​IterableIterator>​ ConstBegin</​code>​ - czysto abstrakcyjna metoda (bez domyślnej implementacji) przesłanialna w klasach pochodnych ma za zadanie zwracanie odpowiedniego iteratora do początku sekwencji dla właściwej klasy. +      * <code cpp>​std::​unique_ptr<​IterableIterator>​ ConstBegin()</​code>​ - czysto abstrakcyjna metoda (bez domyślnej implementacji) przesłanialna w klasach pochodnych ma za zadanie zwracanie odpowiedniego iteratora do początku sekwencji dla właściwej klasy. 
-      * <code cpp>​std::​unique_ptr<​IterableIterator>​ ConstEnd</​code>​ - czysto abstrakcyjna metoda (bez domyślnej implementacji) przesłanialna w klasach pochodnych ma za zadanie zwracanie odpowiedniego iteratora za końcem sekwencji dla właściwej klasy.+      * <code cpp>​std::​unique_ptr<​IterableIterator>​ ConstEnd()</​code>​ - czysto abstrakcyjna metoda (bez domyślnej implementacji) przesłanialna w klasach pochodnych ma za zadanie zwracanie odpowiedniego iteratora za końcem sekwencji dla właściwej klasy.
       * <code cpp>​IterableIteratorWrapper cbegin() const</​code>​ - konkretna metoda (nie wirtualna), która wywołuje ConstBegin i tworzy odpowiedni typ do zwrócenia.       * <code cpp>​IterableIteratorWrapper cbegin() const</​code>​ - konkretna metoda (nie wirtualna), która wywołuje ConstBegin i tworzy odpowiedni typ do zwrócenia.
       * <code cpp>​IterableIteratorWrapper cend() const</​code>​ - konkretna metoda (nie wirtualna), która wywołuje ConstEnd i tworzy odpowiedni typ do zwrócenia.       * <code cpp>​IterableIteratorWrapper cend() const</​code>​ - konkretna metoda (nie wirtualna), która wywołuje ConstEnd i tworzy odpowiedni typ do zwrócenia.
pl/dydaktyka/jimp2/2017/labs/dziedziczenie.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0