//19. Обработка на изключения: дефиниции, класическа обработка на // изключения; пример с деление на 0. // // Fig. 13.1: fig13_01.cpp // A simple exception-handling example that checks for // divide-by-zero exceptions. #include using std::cout; using std::cin; using std::endl; #include using std::exception; // DivideByZeroException objects should be thrown by functions // upon detecting division-by-zero exceptions class DivideByZeroException : public exception { public: // constructor specifies default error message DivideByZeroException::DivideByZeroException() : exception( "attempted to divide by zero" ) {} }; // end class DivideByZeroException // perform division and throw DivideByZeroException object if // divide-by-zero exception occurs double quotient( int numerator, int denominator ) { // throw DivideByZeroException if trying to divide by zero if ( denominator == 0 ) throw DivideByZeroException(); // terminate function // return division result return static_cast< double >( numerator ) / denominator; } // end function quotient int main() { int number1; // user-specified numerator int number2; // user-specified denominator double result; // result of division cout << "Enter two integers (end-of-file to end): "; // enable user to enter two integers to divide while ( cin >> number1 >> number2 ) { // try block contains code that might throw exception // and code that should not execute if an exception occurs try { result = quotient( number1, number2 ); cout << "The quotient is: " << result << endl; } // end try // exception handler handles a divide-by-zero exception catch ( DivideByZeroException ÷ByZeroException ) { cout << "Exception occurred: " << divideByZeroException.what() << endl; } // end catch cout << "\nEnter two integers (end-of-file to end): "; } // end while cout << endl; return 0; // terminate normally } // end main /**********************************/ // straus1.cpp #include using namespace std; class Vector { public: enum { max = 32000 }; class Range { public: int index; Range(int i): index(i){} }; class Size {}; Vector(int); int &operator[](int); private: int *p; int sz; }; void f(); int main() { cout << "begin main()\n"; f(); cout << "end main()\n"; return 0; } Vector::Vector(int s) { cout << "Vector::Vector\n"; if (s<0 || s>max) throw Size(); sz = s; p = new int[sz]; } int &Vector::operator[](int i) { cout << "Vector::operator[](int)\n"; if (i>0 && i