WZORCE (SZABLONY) KLAS - PRZYKŁAD
1 //PLIK stosy.cpp// Przyklad definicji stosu znakow i stosu liczb calkowitych // Nalezy zwrocic uwage na to, czym roznia sie definicje stosow // znakow i liczb calkowitych. Plik stos_t.cpp zawiera przyklad
// wykorzystania koncepcji klasy wzorcowej do uproszczenia (sparametryzowania) // definicji stosu dla dowolnego, istniejacego typu obiektow
#include <iostream.h>
#include <constream.h>
//Definicja klasy obiektow STOS ZNAKOW class StosZnakow {
char* v;
char* p;
int rozm;
public:
StosZnakow(int r) {v=p=new char[rozm=r];}
~StosZnakow(){delete [] v;}
void wloz(char a){*p++=a;}
char zdejmij (){return *--p;}
int rozmiar() const {return p-v;}
}; // koniec klasy stos
//Definicja klasy obiektow STOS LICZB CALKOWITYCH class StosLiczbCalkowitych {
int* v;
int* p;
int rozm;
public:
StosLiczbCalkowitych(int r) {v=p=new int[rozm=r];}
~StosLiczbCalkowitych(){delete [] v;}
void wloz(int a){*p++=a;}
int zdejmij (){return *--p;}
int rozmiar() const {return p-v;}
}; // koniec klasy stos
//Czesc testowa void main() {
clrscr();
cout<<"\n\t PRZYKLAD: Definicja stosu znakow \n";
//Stos znakow
StosZnakow sc(100);
cout <<"\nKolejnosc kladzenia znakow na stosie\n\t";
for(int i=33;i<100;i++){ sc.wloz(char(i));cout<<char(i);}
cout <<"\nKolejnosc pobierania znakow ze stosu\n\t";
for( i=33;i<100;i++)cout<<sc.zdejmij();
cout<<"\n\n\n\n\t PRZYKLAD: Definicja stosu liczb calkowitych\n";
//Stos liczb calkowitych
StosLiczbCalkowitych si(100);
cout <<"\nKolejnosc kladzenia liczb na stosie\n\t";
for( i=0;i<20;i++){ si.wloz(i);cout<<setw(3)<<i;}
cout <<"\nKolejnosc pobierania liczb ze stosu\n\t";
for( i=0;i<20;i++)cout<<setw(3)<<si.zdejmij();
}// koniec main()
WZORCE (SZABLONY) KLAS - PRZYKŁAD
2 //PLIK: stos_t.cpp// Przyklad definicji stosu znakow i stosu liczb calkowitych // przy uzyciu wzorca klasy
// Jest to uogolnione rozwiĄzanie pozwalajĄce konstruowac
// stos dowolnego typu obiektu w oparciu o jedna definicje stosu // Ten program jest rownowaznikiem przykladowego programu stosy.cpp
#include <iostream.h>
#include <constream.h>
template <class TypIstniejacy> // TypIstniejacy jest pramterem
// ktory w definicji stosu nalezy zamienic // na nazwe istniejacego typu (wbudowanego // lub zdefiniowanego przez uzytkownika) class stos {
TypIstniejacy* v;
TypIstniejacy* p;
int rozm;
public:
stos(int r) {v=p=new TypIstniejacy[rozm=r];}
~stos(){delete [] v;}
void wloz(TypIstniejacy a){*p++=a;}
TypIstniejacy zdejmij (){return *--p;}
int rozmiar() const {return p-v;}
}; // koniec klasy stos
///Czesc testowa void main() {
clrscr();
cout<<"\n\t PRZYKLAD: Definicja stosu znakow przy uzyciu wzorca klasy\n";
//Stos znakow - identyczne dzialanie jak programu stosch.cpp
stos <char> sc(100); // tutaj za TypIstniejacy wstawiamy typ char // UWAGA: musimy uzyc nawiasow <>
cout <<"\nKolejnosc kladzenia znakow na stosie\n\t";
for(int i=33;i<100;i++){ sc.wloz(char(i));cout<<char(i);}
cout <<"\nKolejnosc pobierania znakow ze stosu\n\t";
for( i=33;i<100;i++)cout<<sc.zdejmij();
cout<<"\n\n\n\n\t PRZYKLAD: Definicja stosu liczb przy uzyciu wzorca klasy\n";
//Stos liczb calkowitych - identyczne dzialanie jak programu stosint.cpp stos <int> si(100); //tutaj za TypIstniejacy wstawiamy typ int
cout <<"\nKolejnosc kladzenia liczb na stosie\n\t";
for( i=0;i<20;i++){ si.wloz(i);cout<<setw(3)<<i;}
cout <<"\nKolejnosc pobierania liczb ze stosu\n\t";
for( i=0;i<20;i++)cout<<setw(3)<<si.zdejmij();
}// koniec main()
************************************** LISTING WYKONANIA PROGRAMU *********************************
PRZYKLAD: Definicja stosu znakow przy uzyciu wzorca klasy
Kolejnosc kladzenia znakow na stosie
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc Kolejnosc pobierania znakow ze stosu
cba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
PRZYKLAD: Definicja stosu liczb przy uzyciu wzorca klasy
Kolejnosc kladzenia liczb na stosie
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Kolejnosc pobierania liczb ze stosu
19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0