Программирование >>  Дополнительные возможности наследования 

1 ... 213 214 215 [ 216 ] 217 218 219 ... 265


20: методы доступа

21: int GetitsSizeO const { return itsSize; }

23; функция-друг

24; friend ostream& operator<< (ostreami, const Array<T>&);

26: определение классов исключений 27:

28: class xSize { } ;

30: private:

31; int рТуре;

32: int itsSize;

33: } ;

35: template <class T>

36; Array<T>::Array(int size):

37: itsSize(size)

38: {

39: if (size <10 1 size > 30000)

40; throw xSizeO;

41: pType = new T[size];

42: for (int i = 0; Ksize; i++)

43; pType[i] = 0;

44: }

46: template <class T>

47; Array<T>8, Array<T>; ;operator=(const Array<T> &rhs)

48: {

49: if (this == &rhs)

50: return *this;

51; delete [] pType;

52: itsSize = rhs. GetitsSizeO;

53; pType = new T[itsSize];

54: for (int 1 = 0; KitsSize; i++)

55: pType[i] = rhs[i];

56: }

57; template <class T>

58; Array<T>::Array(const Array<T> &rhs)

59; {

60: ItsSize = rhs. GetitsSizeO;

61; pType = new T[itsSize];

62; for (int 1 = 0; KitsSize; i++)

63: pType[i] = rhs[i];

64: }

66: template <class T>

67: T& Array<T>::operator[](int offSet)

68; {

69; int size = GetitsSizeO;

70: If (offset >= 0 && offSet < GetitsSizeO)



71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

return pType[offSet]; throw xBoundary(); return pType[0];

template <class T>

const T& Array<T>::operator[](int offSet) const {

int mysize = GetitsSizeO;

if (offset >= 0 && offset < GetitsSizeO)

return pType[offSet]; throw xBoundaryO;

template <class T>

ostream& operator (ostream& output, const Array<T>& theArray) {

for (int 1 = 0; KtheArray,GetitsSizeO; i++)

output << [ << 1 << ] << theArray[i] << endl; return output;

int mainO {

try {

Array<int> intArray(9); for (int j = 0; 3< 100; ]++) {

intArray[j] = j;

cout << intArray[ << j << ] okay.., << endl;

catch (xBoundary)

cout Unable to process your input!\ n ; catch (Array<int>::xSize) cout Bad Size!\ n ;

cout << Done.\ n ; return 0;

Done



* Первое исключение, xBoundary, объявлено вне определения шаблона в стро-

ке 4; второе исключение, xSize, - внутри определения шаблона в строке 28. Исключение xBoundary не связано с классом шаблона, но его можно использовать так же, как и любой другой класс. Исключение Х31ге связано с шаблоном и должно вызываться для экземпляра класса Array. Обратите внимание на разницу в синтаксисе двух операторов catch. Строка 106 содержит выражение catch (xBoundary), а строка ПО - выражение catch (Array<int>: ixSize). Второй вариант связан с обращением к исключению экземпляра целочисленного массива.

Исключения Оез пшиОпк

Когда программисты С++ после работы собираются за чаркой виртуального пива в баре киберпространства, в их задушевных беседах часто затрагивается вопрос, можно ли использовать исключения не только для отслеживания ошибок, но и для выполнения рутинных процедур. Есть мнение, что использование исключений следует ограничить только отслеживанием предсказуемых исключительных ситуаций, для чего, собственно, исключения и создавались.

В то же время другие считают, что исключения предоставляют эффективный способ возврата сквозь несколько уровней вызовов функций, не подвергаясь при этом опасности утечки памяти. Чаще всего приводится следующий пример. Пользователь формирует запрос на некоторую операцию в среде GUI (фафический интерфейс пользователя). Часть кода, которая перехватывает этот запрос, должна вызвать функцию-член менеджера диалоговых окон, которая, в свою очередь, вызывает код, обрабатывающий этот запрос. Этот код вызывает другой код, который решает, какое диалоговое окно использовать, и, в свою очередь, вызывает код, чтобы отобразить на экране это диалоговое окно. И теперь уже этот код наконец-то вызывает другой код, который обрабатывает данные, вводимые пользователем. Если пользователь щелкнет на кнопке Cancel (Отменить), код должен возвратиться к самому первому вызывающему методу, где обрабатывался первоначальный запрос.

Один подход к решению этой проблемы состоит в том, чтобы поместить блок try сразу за тем блоком программы, где формируется исходный запрос, и перехватывать объект исключения CancelOialog, который генерируется обработчиком сообщений для кнопки Cancel. Это безопасно и эффективно, хотя щелчок на кнопке Cancel по сути своей не относится к исключительной ситуации.

Чтобы решить, насколько правомочно такое использование исключений, попытайтесь ответить на следующие вопросы: станет ли в результате программа проще или, наоборот, труднее для понимания; действительно ли уменьшится риск возникновения ошибок и утечки памяти; труднее или проще теперь станет поддержка такой профаммы? Безусловно, объективно ответить на эти вопросы сложно: многое зависит от привычек и субъективных взглядов профаммиста, из-за чего, кстати, и возникают споры вокруг этих вопросов.

ОшиОки U отладка программы

Почти все современные среды разработки содержат один или несколько встроенных эффективных отладчиков. Основная идея использования отладчика такова; отладчик зафужает и выполняет исходный код программы в режиме, удобном для отслеживания выполнения отдельных строк профаммы и выявления ошибок.



1 ... 213 214 215 [ 216 ] 217 218 219 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика