#include #include const int MAX_LKM=5; template class cPino { int top; TYYPPI alkiot[MAX_LKM]; public: class cPinoVirhe { string viesti; public: cPinoVirhe(const string &s) : viesti(s) {}; const string &getViesti() { return viesti; } }; class cPushVirhe : public cPinoVirhe { TYYPPI n; public: cPushVirhe(const string &s,const TYYPPI &an) : cPinoVirhe(s),n(an) {}; TYYPPI getN() { return n; } }; cPino() { top = 0; } void push(const TYYPPI &i) { if ( top >= MAX_LKM ) throw cPushVirhe("Ei voi pussata",i); alkiot[top] = i; // = -operator top++; } TYYPPI pop() { if ( top <= 0 ) throw cPinoVirhe("Ei voi popata"); top--; return alkiot[top]; // copy constructor } }; int main(void) { cPino pino; cPino pinod; try { pino.push("Kissa"); pino.push("Koira"); pino.push("Koira"); pino.push("Koira"); pino.push("Kettu"); pino.push("Mato"); } catch ( cPino::cPushVirhe v ) { cout << v.getViesti() << " " << v.getN() << "\n"; } try { pinod.push(23.4); pinod.push(4.5); pinod.push(4.5); pinod.push(4.5); pinod.push(4.5); pinod.push(4.6); pinod.push(4.8); } catch ( cPino::cPushVirhe v ) { cout << v.getViesti() << " " << v.getN() << "\n"; } try { cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; cout << pino.pop() << "\n"; } catch ( cPino::cPinoVirhe v ) { cout << v.getViesti() << "\n"; } try { cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; cout << pinod.pop() << "\n"; } catch ( cPino::cPinoVirhe v ) { cout << v.getViesti() << "\n"; } return 0; }