Освой самостоятельно С++ за 21 день - [273]

Шрифт
Интервал

#include

#include

#include

class OutOfMemory;

{

   public:

      OutOfMemory(char *):

      char>> GetString() { return itsString; }

   private:

      char>> itsString;

};

OutOfMemory::OutOfMemory(char * theType)

{

   itsString = new char[80];

   char warning[] = "Out Of Memory! Can't allocate room for: ";

   strncpy(itsString, warning,60);

   strncat(itsString,theType,19);

}

int main()

{

   try

   {

     int *myInt = new int;

     if (myInt == 0)

        throw OutOfMemory("int");

   }

   catch (OutOfMemory& t:heException)

   {

      cout << theException.GetString();

   }

   return 0;

}

3. Унаследуйте новое исключение от исключения, полученного в упражнении 2. Измените блок оператора catch таким образом, чтобы в нем происходила обработка как производного, так и базового исключений.

1: #include

2:

3: // Абстрактный тип исключений

4: class Exception

5: {

6:    public:

7:       Exception(){}

8:       virtual ~Exceptiori(){}

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\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

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 <

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);


Рекомендуем почитать
Массовая литература сегодня

В пособии обсуждаются вопросы, связанные с историей массовой литературы, этапами ее изучения в России и на Западе, выявляются дифференциальные признаки массовой литературы, устанавливается ее место в литературном процессе и культуре, степень влияния на читательскую аудиторию, характеризуется язык текстов массовой литературы в проекции на языковую ситуацию рубежа XX–XXI веков. Особый раздел пособия посвящен филологическому анализу детектива, романа-боевика, фантастического романа, дамского романа, историко-авантюрного романа, популярной песни и некоторых других актуальных жанров массовой литературы.


Актуальные проблемы современной лингвистики

Предлагаемое пособие включает развернутую программу учебной дисциплины «Актуальные проблемы современной лингвистики», хрестоматию и систему заданий творческого и проблемного характера. Издание призвано обеспечить изучение цикла общелингвистических дисциплин: «Теория языка», «Общее языкознание», «Актуальные проблемы современной лингвистики», включенных в блок специальных дисциплин государственного образовательного стандарта по направлению «Филология», а также в образовательный стандарт подготовки магистров по направлениям «Филология» и «Языковое образование».Для студентов, магистрантов, аспирантов, преподавателей-филологов.6-е издание.


Общая психология

В предлагаемом учебном пособии в сжатой концентрированной форме изложен полный курс предмета «Общая психология». В книге рассматриваются базовые термины и понятия науки, основные подходы и методы исследования. Подробно описаны основные исторические этапы развития психологии, дана характеристика психологических школ и теорий.Компактная подача и доступное изложение материала, наглядный иллюстративный материал делают эту книгу незаменимой для студентов вузов, позволяют им сэкономить время и максимально быстро и качественно подготовиться к семинарам, зачетам и экзаменам по данному курсу.Для студентов и преподавателей высших учебных заведений, а также для всех, кто интересуется вопросами психологии.


Следственные действия: психология, тактика, технология

Книга посвящена правовым, психологическим и криминалистическим основам следственных действий как процессуальных способов доказывания по уголовным делам. Рассмотрены общая характеристика следственного действия, психологические условия и приёмы повышения их эффективности, даны рекомендации по подготовке и проведению отдельных видов основных следственных действий, регламентируемых ныне действующим УПК РФ.Для работников правоохранительных органов, студентов, аспирантов, докторантов, профессорско-преподавательского состава юридических учебных заведений.


Введение в славянскую филологию

В учебном пособии освещаются основные положения программы курса «Введение в славянскую филологию». Славянская филология — наука о культуре славянских народов в ее словесно-текстовом выражении. В пособии рассматриваются культурная история славянских народов, мифология древних славян, их бытовое устройство, старинная обрядность, особенности письменности, факты славянских языков во взаимосравнении, основные особенности славянских литератур (в частности, стихосложения) и т. п., а также деятельность крупнейших филологов-славистов.Для студентов, аспирантов и преподавателей филологических факультетов вузов.


Технология интервью

Данное пособие посвящено важнейшему разделу курса «Основы творческой деятельности журналиста» и в отечественной литературе аналогов не имеет. Книга задумана как практическое руководство для будущих журналистов. При этом автор учитывает опыт практикующих журналистов, а также российских и зарубежных коллег.Книга предназначена для преподавателей, аспирантов и студентов университетов и других учебных заведений, готовящих журналистов.