Чтение онлайн

ЖАНРЫ

Освой самостоятельно С++ за 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";

Поделиться с друзьями: