You are on page 1of 3

OBJEKTNO ORIJENTIRANO PROGRAMIRANJE Laboratorijske vjebe

Rjeenja LV6; // Iznimke, imenici

Elektrotehniki fakultet Osijek

Kneza Trpimira 2b 31000 Osijek www.etfos.hr

Zadatak 1. Napisati klasu stog koja ima funkcionalnost stoga. Kreirati dva razliita objekta iznimke koji se bacaju ako se pokua dodati element na puni stog ili skinuti element sa praznog stoga. U mainu kreirati objekt stog te testirati bacanje i hvatanje iznimki. Rjeenje:
#include <iostream> #include <string> using namespace std; // Klase iznimki: class iznimkaStoga { private: string msg; public: iznimkaStoga (const char *c):msg(c){} string Error (){return msg;} }; // Nasa klasa stog: class Stog { private: int *S; // Pokaziva na spremnik (niz od n elemenata) int BrElemenata; // Veliina stoga int vrh; // Stack pointer - govori koji element je vrni public: Stog (int velicina); // Konstruktor ~Stog (); // Destruktor void Push (int x); // Stavljanje na stog int Pop (); // Micanje sa stoga bool Prazan (); // Provjera je li stog prazan bool Pun (); // Provjera je li stog pun }; // Konstruktor: Stog::Stog (int velicina = 10) { BrElemenata = velicina; S = new int [BrElemenata]; // Napravi polje u koje emo spremati vrh = -1; // Prazan stog nema elemente, vrh je -1, jer e prvi el. biti S[0] } // Destruktor Stog::~Stog () { delete [] S; // Brisanje din. aloc. polja

} // Provjera je li prazan: bool Stog::Prazan () { return (vrh == -1); // Ako je vrh na -1, vrati 1 stog je prazan, inae 0 } // Provjera je li pun: bool Stog::Pun () { return ((vrh+1) == BrElemenata); // vrh+1 je jednako BrElemenata (0-9 je 10 elemenata), ako je vrsni element S[9] -> 9+1 = BrElemenata(10) } // Stavljanje na stog: void Stog::Push (int x) { if (Pun()) // Provjeri je li stog pun throw iznimkaStoga("Stog je pun!"); vrh++; // Podigni vrsni element za 1 S[vrh]=x; // na to mjesto stavi novi element } // Uklanjanje sa stoga: int Stog::Pop () { if (Prazan()) // Provjeri je li prazan throw iznimkaStoga ("Stog je prazan!"); vrh--; // smanji vrsno mjesto return S[vrh+1]; // vrati element sa prethodnog mjesta } int main () { Stog S1(10); try { for (int i=0;i<11;i++) S1.Push(i); } catch (iznimkaStoga &iznimka) { cout << iznimka.Error() << endl; } try { for (int i=0;i<11;i++) cout<<S1.Pop ()<<endl; } catch (iznimkaStoga &iznimka) { cout << iznimka.Error() << endl; } return 0; }

Zadatak 2.
Napraviti dva imenika NSTest i NSProba, te u njima definirati klasu tocka sa konstruktorom koji ispisuje ime imenika u kojem se klasa nalazi. U glavnom programu pozvati klasu tocka iz oba imenika, jednu pomou punog identifikatora, drugu pomou kljune rijei using.

Rjeenje:
#include <iostream> using namespace std; namespace NSTest { class Tocka { private: int x,y; public: Tocka (int xx = 0 , int yy = 0):x(xx),y(yy){cout << "Tocka iz NSTest!"<<endl;} }; } namespace NSProba { class Tocka { private: int x,y; public: Tocka (int xx = 0 , int yy = 0):x(xx),y(yy){cout << "Tocka iz NSProba!"<<endl;} }; } int main () { NSTest::Tocka T1 (1,4); { using namespace NSProba; Tocka T1 (8,4); } return 0; }

You might also like