/* Oto naprawde niezwykle prosta klasa elem * Definiuje ona element listy jednokierunkowej * */ class elem { public: /* konstruktor - funkcja wywolywana zaraz po utworzeniu obiektu */ elem (); /* desruktor - funkcja wywolywana przed uwolnieniem pamieci zajmowanej przez obiekt */ ~elem (); public: /* Definiowane sa 3 metody klasy. * get_next - zwraca wskaznik do elementu nastepnego * set_next - ustawianie "na sile" elementu nastepnego * insert_after - dodaje element do listy bezposrednio za biezacym * */ /* Wewnatrz definicji klasy mozna umieszczec rowniez * implementacje funkcji. w przypadku trywialnych * moze to byc nawet uzasadnione. slowo kluczowe * "inline" oznacza ze zamiast wywolania funkcji (call) * kompilator umieszcza w kodzie pelna jej implementacje. * W przypadku dlugich, wielokrotnie wywolywanych funkcji * moze to powodowac znaczny rozrost kodu wynikowego. * */ inline elem * get_next () { return pnext; } elem *set_next (elem * ael); elem *insert_after (elem * ael); private: elem * pnext; }; -------------------------------------------------------------------------------- Plik elem.cpp #include #include "elem.h" /* * hmm... jaki by tu dodac komentarz ... * */ /* * "cout" jest obiektem klasy iostream zwiazanej z manipulacja * standardowym strumieniem wyjsciowym. * operator << jest zdefiniowany dla klasy iostream. powoduje * on wydruk na ekran lancucha znakow odpowiadajacego argumentowi. * "endl" to znak konca linii (to samo co "\n"). * * UWAGA: aby stosowac "cout" trzeba dodac linie: * #include na poczatku pliku * oraz linkowac za pomoca g++ a nie gcc (pod linuxem) * */ elem::elem () { cout << "konstruktor klasy elem" << endl; } /* * Destruktor obieku sprawdza czy istnieje element nastepny * Jezeli istnieje to go niszczy. Dzieki temu usuwajac pierwszy * element listy, usowane sa wszystkie jej elementy (rekurencyjnie) * */ elem::~elem () { if (pnext) delete pnext; cout << "destruktor klasy elem" << endl; } /* * metoda wstawia element za aktualnym. * */ elem * elem::insert_after (elem * ael) { if (!pnext) return (pnext = ael); if (!ael) return 0; ael->set_next (pnext); return pnext = ael; } elem * elem::set_next (elem * ael) { if (!ael) return 0; return pnext = ael; } -------------------------------------------------------------------------------- Plik main.cpp #include #include "elem.h" int main(){ elem *a; elem *pa; a=new elem; pa=a; /* inaczej niz w przypadku programów pisanych w C, * w C++ isnieje mozliwosc deklarowania zmiennych * po inicjalizacji innych. Zmienna i ma zasieg tylko * wewnatrz petli for(){}*/ /* * Tworzymy w sumie 10 elementow dodajac kazdy nastepny * na koncu listy*/ for(int i=0; i<9;i++) pa=pa->insert_after(new elem); int c=0; pa=a; do{ /* najpierw drukujemy zawartosc c a potem inkrementujemy * sprawdz co sie stanie jesli napiszemy cout << ++c <get_next()); // iterujemy po wszystkich elementach listy delete a; return 0; }