OStack.h

IdĽ do dokumentacji tego pliku.
00001 /*
00002   Name: DL programowanie zadanie 15 z rozdziału 16 książki Thinking in C++
00003   Author: Piotr Leżoń
00004   Date: 27-06-06 19:28
00005   Description: Zmodyfikuj programy C15:OStack.h oraz C15:OStackTest.cpp,
00006 przekształcając klasę Stack w szablon, dzięki czemu będzie on automatycznie
00007 wielokrotnie dziedziczył zarówno po zawartej w nim klasie, jak i po klasie
00008 Object. Skonkretyzowana klasa Stack powinna pobierać i zwracać wyłącznie
00009 wskaźniki zawartego w niej typu.
00010 */
00011 //: C15:OStack.h
00012 // From Thinking in C++, 2nd Edition
00013 // Available at http://www.BruceEckel.com
00014 // (c) Bruce Eckel 2000
00015 // Copyright notice in Copyright.txt
00016 // Using a singly-rooted hierarchy
00017 #ifndef OSTACK_H
00018 #define OSTACK_H
00019 #include <iostream>
00020 
00021 using namespace std;
00022 
00023 class Object {
00024 public:
00025   virtual ~Object() = 0;
00026 };
00027 
00028 // Required definition:
00029 inline Object::~Object() {cout<<"Wywolanie destruktora klasy Object!"<<endl;}
00030 
00031 template<class T>
00032 class Stack {
00033   struct Link {
00034     T* data;
00035     Link* next;
00036     Link(T* dat, Link* nxt) : 
00037       data(dat), next(nxt) {}
00038   }* head;
00039 public:
00040   Stack() : head(0) {}
00041   ~Stack(){ 
00042     while(head)
00043       delete pop();
00044   }
00045   void push(T* dat) {
00046     head = new Link(dat, head);
00047   }
00048   T* peek() const { 
00049     return head ? head->data : 0;
00050   }
00051   T* pop() {
00052     if(head == 0) return 0;
00053     T* result = head->data;
00054     Link* oldHead = head;
00055     head = head->next;
00056     delete oldHead;
00057     return result;
00058   }
00059 };
00060 #endif // OSTACK_H 

Wygenerowano Tue Jun 27 19:37:05 2006 dla DL programowanie, zadanie 20 z rozdzialu 16 ksiazki Thinking in C++ programem  doxygen 1.4.6-NO