Джесс Либерти - Освой самостоятельно С++ за 21 день.

Здесь есть возможность читать онлайн «Джесс Либерти - Освой самостоятельно С++ за 21 день.» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Освой самостоятельно С++ за 21 день.: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Освой самостоятельно С++ за 21 день.»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.
Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Освой самостоятельно С++ за 21 день. — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Освой самостоятельно С++ за 21 день.», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

6. Следует ли передавать исключения как значения или как ссылки?

Вообше исключения нужно передавать как ссылки. Если вы не собираетесь модифицировать содержимое объекта исключения, вам следует передать ссылку, определенную с помошью ключевого слова const.

7. Будет ли оператор catch перехватывать производные исключения, если он настроен на базовый класс исключения?

Да, если исключение будет передано как ссылка.

8. Если используются два оператора catch, один из которых настроен на базовое сообщение, а второй ~ на производное, то в каком порядке их следует расположить?

Операторы catch проверяются в порядке их расположения в исходном коде. Причем если первый оператор catch перехватит исключение, то другие операторы catch уже вызываться не будут. Поэтому операторы catch следует располагать в порядке от специфичных (производных) к общим (базовым).

9. Что означает оператор catch(...)?

Оператор catch(...) будет перехватывать все исключения любого типа.

10. Что такое точка останова?

Это позиция в коде, в которой отладчик остановит выполнение программы.

Упражнения

1. Запишите блок try и оператор catch для отслеживания и обработки простого исключения.

#include

class OutOfMemory {};

int main()

{

try

{

int *myInt = new int;

if (myInt == 0)

throw OutOfMemory();

}

catch (OutOfMemory)

{

cout << "Unable to allocate memory!\n";

}

return 0;

}

2. Добавьте в исключение, полученное в упражнении 1, переменную-член и метод доступа и используйте их в блоке оператора catch.

#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()

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Освой самостоятельно С++ за 21 день.»

Представляем Вашему вниманию похожие книги на «Освой самостоятельно С++ за 21 день.» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Освой самостоятельно С++ за 21 день.»

Обсуждение, отзывы о книге «Освой самостоятельно С++ за 21 день.» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x