Opdracht 3: Exceptions.

© Harry Broeders.

De in het dictaat behandelde implementatie van een stack door middel van een array (zie paragraaf 4.1) breekt het programma af als een stackoverflow of stackunderflow optreedt.

Tip.

Als je een programma test met Borland Builder dan zal het uitvoeren van het programma, telkens als er een exception optreedt, onderbroken worden. Je moet dan na elke exception een "run" commando geven om het programma verder te laten gaan. Dit is bij het testen van exceptions (bij deze opdracht dus) erg irritant. Je kunt dit veranderen via het menu Tools, Debugger Options. Je moet in het tabblad "Language Exceptions" het vinkje "Stop on C++ Exceptions" uitzetten.

Opdracht 3.

De template class StackWithArray<T> (stackarray.h ) is afgeleid van de abstract template base class Stack<T> (stack.h ).

Pas de file stackarray.h zodanig aan dat de stack een exception veroorzaakt bij stackoverflow, stackunderflow en andere errors. Ontwerp een hiërarchie van exceptionclasses die het mogelijk maken om een specifieke of generieke stackfout af te vangen. Geef de exceptionclasses een memberfunctie print() die ervoor zorgt dat een passende foutmelding wordt afgedrukt. Zorg ervoor dat in het volgende (stacktest.cpp ) geval een juiste foutmelding verschijnt:

#include <iostream>
using namespace std;

#include "stackarray.h"

int main() {
   StackWithArray<int> s(10);
   try {
      s.push(2);
      while (true)
         s.pop();
   } catch (StackError& e) {
      // hier worden alle generieke StackError's opgevangen
      e.print();
   }
   try {
      while(true)
         s.push(3);
   } catch (StackPushError& e) {
      // hier wordt alleen de specifieke StackPushError opgevangen
      e.print();
   }
   cin.get();
   cin.get();
   return 0;
}

verder met opdracht 4...