Освой самостоятельно С++ за 21 день.
Шрифт:
20: private:
21: };
22:
23: void OutOfMemory::PrintError
24: {
25: cout << "Нет памяти !!\n";
26: }
27:
28: // Производный класс для обработки ввода неверных чисел
29: class RangeError : public Exception
30: {
31: public:
32: RangeError(unsigned long number){badNumber = number:}
33: ~RangeError{}
34: virtual void PrintError;
35: virtual unsigned long GetNumber { return badNumber; }
36: virtual void SetNumber( unsigned long number) {badNumber = number;}
37: private:
38: unsigned long badNumber;
39: };
40:
41: void RangeError::PrintError
42: {
43: cout << "Number out of range. You used " << GetNumber << "N\n";
44: }
45:
46: void MyFunction; //
47:
48: int main
49: {
50: try
51: {
52: MyFunction;
53: }
54: // Чтобы использовать только один оператор catch,
55: // примените для этого виртуальные функции
56: catch (Exceptions theException)
57: {
58: theException.PrintError;
59: }
60: return 0;
61: }
62:
63: void MyFunction
64: {
65: unsigned int *myInt = new unsigned int;
66: long testNumber;
67: if (myInt == 0)
68: throw 0ut0fMemory;
69: cout << "Enter an int: ";
70: cin >> testNumber;
71: // эту проверку лучше заменить серией
72: // проверок, чтобы выявить неверные данные, введенные пользователем
73: if (testNumber > 3768 || testNumber < 0)
74: throw RangeError(testNumber);
75:
76: *mylnt = testNumber;
77: cout << "Ok. myInt: " << *myInt;
78: delete myInt;
79: }
4. Измените код из упражнения 3, чтобы получить трехуровневый вызов функции.
1: #include <iostream.h>
2:
3: // Абстрактный тип исключений
4: class Exception
5: {
6: public:;
7: Exception{ }
8: virtual ~Exception{}
9: virtual void PrintError = 0;
10: };
11:
12: // Производный класс для обработки проблем памяти
13: // Обратите внимание: в этом классе не производится выделение памяти!
14: class OutOfMemory : public Exception
15: {
16: public:
17: OutOfMemory{}
18: ~OutOfMemory{}
19: virtual void PrintError;
20: private:
21: };
22:
23: void OutOfMemory::PrintError
24: {
25: cout << "Нет памяти!!\n";
26: }
27:
28: // Производный класс для обработки ввода неверных чисел
29: class RangeError : public Exception
30: {
31: public:
32: RangeError(unsigned long number){badNumber = number;}
33: ~RangeError{ }
34: virtual void PrintError;
35: virtual unsigned long GetNumber { return badNumber; }
36: virtual void SetNumber(unsigned long number) {badNumber = number;}
37: private:
38: unsigned long badNumber;
39: };
40:
41: void RangeError::PrintError
42: {
43: cout << " Number out of range. You used " << GetNumber << "!!\n";
44: }
45:
46: //
прототипы функций47: void MyFunction;
46: unsigned int * FunctionTwo;
49: void FunctionThree(unsigned int *);
50:
51: int main
52: {
53: try
54: {
55: MyFunction;
56: }
57: // Чтобы использовать только один оператор catch,
58: // примените для этого виртуальные функции.
59: catch (Exception& theException)
60: {
61: theException.PrintError;
62: }
63: return 0;
64: }
65:
66: unsigned int >> FunctionTwo
67: {
68: unsigned int <<royInt = new unsigned int;
69: if (myInt == 0)
70: throw OutOfMemory;
71: return myInt;
72: }
73:
74: void MyFunction
75: {
76: unsigned int *myInt = FunctionTwo{ };
77:
78: FunctionThree(myInt);
79: cout << "0k. myInt: " << *myInt;
80: delete myInt;
81: }
82:
83: void FunctionThree(unsigned int *ptr)
84: {
85: long testNumber;
86: cout << "Enter an int: ";
87: cin >> testNumber;
88: // эту проверку лучше заменить серией
89: // проверок, чтобы выявить неверные данные, введенные пользователем
90: if (testNumber > 3768 || testNumber < 0)
91: throw RangeError(testNumber);
92: *ptr = testNumber;
93: }
5. Жучки: что неправильно в следуюшем коде?
#include "string.h" // класс строк
class xOutOfMemory
{
public:
xOutOfMemory( const String& where ) : location( where ){ }
~xOutOfMemory{ }
virtual String where{ return location };
private:
String location;
}
main
{
try
{
char *var = new char;
if ( var == 0 )
throw xOutOfMemory;
}
catch( xOutOfMemory& theException )
{
cout << "Out of memory at " << theException.location << "\n";