
//
// Przykładowy kod z rozdziału 5.10.1 "Warunki końcowe" książki
// "Programming -- Principles and Practice Using C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

class Bad_area { };    // Specjalny typ do raportowania błędów w funkcji area().

// Oblicza pole powierzchni prostokąta.
// Zgłasza wyjątek Bad_area, gdy pojawi się nieprawidłowy argument.
int area1(int length, int width)
{
    if (length<=0 || width <=0) throw Bad_area();
    return length*width;
}

//------------------------------------------------------------------------------

int area(int length, int width)
// Oblicza pole powierzchni prostokąta.
// Warunki wstępne: length i width mają wartości dodatnie.
// Warunek końcowy: zwraca dodatnią wartość wyznaczającą pole powierzchni.
{
    if (length<=0 || width <=0) error("Warunek wstępny funkcji area().");
    int a =  length*width;
    if (a<=0) error("Warunek końcowy funkcji area().");
    return a;
}

//------------------------------------------------------------------------------

int main()
try
{
    area(2000000000, 2000000000);
}
catch (exception& e) {
    cerr << "Błąd: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    cerr << "Nieznany wyjątek!\n"; 
    return 2;
}

//------------------------------------------------------------------------------
