ALG1

ALG1



5.3. Stos 131

Idea klasy szablonowej polega na stworzeniu wzorcowego kodu, w którym typ pewnych danych (zmiennych, wartości zwracanych przez funkcje...) nie zostaje precyzyjnie określony, ale jest zastąpiony pewną stalą symboliczną. W naszym przypadku jest to stała TypPodst.

Zaletą tego typu postępowania jest dość duża uniwersalność tworzonej klasy, gdyż dopiero w funkcji main określamy, że np. TypPodst powinien zostać zamieniony na np. JJoat, char* lub jakiś złożony typ strukturalny. Wadą klasy szablonowej jest jednak dość dziwna składnia, której musimy się trzymać chcąc zdefiniować jej metody. O ile jeszcze definicje znajdują się w ciele klasy (tzn pomiędzy jej nawiasami klamrowymi), to składnia przypomina normalny kod C++. W momencie jednak gdy chcemy definicje metody umieścić poza klasą, to otrzymujemy tego rodzaju dziwolągi':

template <rdass TypPodst> int STOS<TypPodst>: : push(TypPodst x)

// element x zc3tanie położony na stos if ( szczyt<=DL(JGOSC_MAX)

(

t[szczyt++]=x;

return (OK);

)else

return (STOS_PELNY);

I

Metoda push, bowiem to jej kod mamy przed oczami, jest bardzo prosta, co jest zresztą cechą wszelkich realizacji tablicowych. Nowy element .v (jaki by nie był jego typ) jest zapisywany na szczyt stosu, który jest wskazywany w pry watnej dla klasy zmiennej szczyt. Następnie wartość szczytu stosu jest inkrementowana - to wszystko pod warunkiem, że stos nie jest już zapełniony!

Metoda pop wykonuje odwrotne zadanie, zdejmowany ze stosu element jest zapamiętywany w zmiennej w (przekazanej w wywołaniu przez referencję); zmień na szczyt jest oczywiście dekrementowana pod warunkiem że stos nie byt pusty (z próżnego to nawet i programista nie... naleje?):

template sclass TypPodsO int 3TOS<TypPodst>:: pop(TypPodst Iw)

3 Oczywiście, zawsze można się pocieszać, że ewentualnie mogłoby to zostać jeszcze bardziej skomplikowane... Ale żarty na bok, powyższe problemy wynikają z prostego faktu: C++ należy do grupy języków których kompilatory muszą znać precyzyjnie typ danych, które wchodzą w grę podczas programowania, stąd tez każdy zabieg, który służy uczynienia go pozornie nieczułym na typy danych, musi być nieco sztuczny. Warto wspomnieć przy okazji, że istnieją języki z zasady pozbawione pojęcia typu danych, np. Smaltalk-80 (jest to język obiektowy o zupełnie innej filozofii niż C++, który wydaje się przy nim swego rodzaju asemblerem obiektowym...).


Wyszukiwarka

Podobne podstrony:
zaniu autobus zużywa mniej paliwa. Idea działania układu polega na równoległym wykorzystaniu dwóch
Wprowadzenie [1] Idea systemu trankingowego polega na automatycznym i dynamicznym podziale ograniczo
330 Blender kompedium 658 Blender. KompendiumVupliFrames Idea techniki DupUFrames polega na odpowied
Operacje w IP (1) Reprezentacja operacji klasy w 1P polega na uszczegółowieniu perspektywy poprzez p
4.9 Przetwarzanie potokowe Zasadnicza idea przetwarzania potokowego polega na rozłożeniu wykonania
98 (131) o Endocytoza kierowana receptorami polega na selektywnym pobieraniu makrocząsteczek ze środ
Układy trójfazoweSkładowesymetryczne Idea składowych symetrycznych polega na tym, 2c stosując
KLASY mmmmm Klasy - gra polegająca na rzucaniu kamyczkiem na określone pole oraz skakaniu po tych po
CV 1 Rozdział 14WYCHOWANIE PREWENCYJNE Problem rodziców polega na tym, że niezależnie od tego, jak w
ALG1 6.6. Klasyczne schematy derekursywacji 181 wykonują systematycznie pewne stałe fragmenty kodu
KLASA IV (2) Praca długoterminowa polegająca na stworzeniu LEKSYKONU UCZNIA po omówieniu większości
Rozdział 2Klasy 2.1 Wprowadzenie Programowanie obiektowe polega na operowaniu w programie obiektami,
ISTOTA I WYKORZYSTANIE RACHUNKU KOSZTOW STANDARDOWYCH Rachunek ten polega na planowaniu wzorcowych
zadania z PowerPointa ĆWICZENIA Z TWORZENIA PREZENTACJIZadanie polega na stworzeniu 5-slajdowej prez
104

więcej podobnych podstron