Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 57

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 57 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 572019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 57)

рпЬаьс всас1с гшр11с1Г орегасог МуЬЫе [гпс ор) ( геспгп пен МуЬЬ1е(ор); ) с1авв МуЬЬ1ебешо ( вгаггс чо1с( Ма1п() МуЬЬ1е а = пен МуЬЬ1е(1); МуЬЬ1е Ь = пен МуЬЬ1е(10); МуЬЬ1е с = пен МуЬЬ1е(); зпо Ы Сопяо1е.нг1сеЫпе("а: " е (гпс) а); Сопво1е.иггсеььпе("Ь: " е (1пс) Ь); // Использовать тип МуЪЬ1е в условном операторе 12. Глава 9. Перегрузка операторов 301 18(а < ь) сопво1е.хгьсеыпе("а меньше ь1п")( Сложить два объекта типа ХуЬЬ1е.

с = а +Ь; сопво1е.хгггецгпе("с после операции с = а т Ь: " + (1пг) с) Сложить значение типа ьпс с объектом типа ХУЬЬ1е. а += 5( сопво1е.хгьгепьпе("а после операции а += 5: " + (гпс) а); Сопзо1е.нгьсеъ1пе() 1 Использовать тип ХУЬЬ1е в выражении типа 1пс.

а*2т3; Сопзо1е.иггсеЬ1пе("Результат вычисления выражения а * 2 + 3: " + Г) Сопзо1е.игьсеъъпе(); // Продемонстрировать присваивание значения типа ьпг и переполнение. а = 19; сопво)я.хг(гег.(пе("Результат присваивания а = 19: " + (1пг) а)г Сопзо1е.игьсеъьпе()( Уг Использовать тип ХУЬЬ1е для управления циклом. Сопво1е.Хг1геъьпе("Управление циклом Гог "с помощью объекта типа ХУЬЬ1е.") Гог(а = 0; а < 10( а++) сопво1е.хгьге((гпг) а ь " "); Сопзо1е.нг1сет ьпе () При выполнении этой программы получается следующий резулътат. а: 1 Ь: 10 а меньше Ь с после операции с = а + Ь: 11 а после операции а += 5: б Результат вычисления выражения а * 2 ь 3: 15 Результат присваивания а = 19: 3 Управление циклом Еог с помощью объекта типа ХУЬЬ1е.

0 1 2 3 4 5 б 7 8 9 Большая часть функций класса НУЬЬ1е не требует особых пояснений. Тем не менее необходимо подчеркнуть ту особую роль, которую операторы преобразования играют в интегрировании класса типа ХуЬЬ1е в систему типов С№. В частности, объект типа ХУЬЬ1е можно свободно комбинировать с данными других типов в арифметических выражениях, поскольку определены преобразования объекта этого типа в тип тлп Ь и обратно.

Рассмотрим для примера следующую строку кода из приведенной выше программы. г = а * 2 + 31 302 Часть Ь Язык Св' В этом выражении переменная с и значения 2 и 3 относятся к типу ьпс, но в ней присутствует также объект типа НуЬЬ1е. Оба типа оказываются совместимыми благодаря неявному преобразованию типа НуЬЬ1е в тип ьпт, В данном случае остальная часть выражения относится к типу 1пс, поэтому объект а преобразуется в тип 1пс с помощью своего метода преобразования.

А благодаря преобразованию типа 1пс в тип ттуЬЬ1е значение типа 1пс может быть присвоено объекту типа НуЬЬ1е. Например, в следующей строке из приведенной выше программы; а = 19г сначала выполняется оператор преобразования типа 1пс в тип нуьь1е. Затем создается новый объект типа НуЬЬ1е, в котором сохраняются 4 младших разряда целого значения 19, а по существу, число 3, поскольку значение 19 превышает диапазон представления чисел для типа НуЬЬ1е. Далее этот объект присваивается переменной экземпляра а. Без операторов преобразования подобные выражения были бы просто недопустимы.

Кроме того, преобразование типа НуЬЬ1е в тип НуЬЬ1е используется в цикле гог. Без такого преобразования организовать столь простой цикл бог было бы просто невозможно. ПРИМЕЧАНИЕ В качестве упражнения попробуйте создать вариант полубайтового типа нуЬЬ1е, предотвращающий переполнение, если присваиваемое значение оказывается за пределами допустимого диапазона чисел. Для этой цели лучше всего сгенерировать исключение.

(Подробнее об исключениях — в главе 13.) 304 часть ). язык О№ Создание одномерных индеиоаторов Ниже приведена общая форма одномерного индексатора; тип элемента гьтя)ьпг индекс] ) Аксессор для получения данных. пег ) Возврат значения, которое определяет импекс. ) Аксессор для установки данных. яег ) Установка значения, которое определяет индекс. ) ) где тип элемента обозначает конкретный тип элемента индексатора. Следовательно, у каждого элемента, доступного с помощью индексатора, должен быть определенный тип элемента.

Этот тип соответствует типу элемента массива. Параметр индекс получает конкретный индекс элемента, к которому осуществляется доступ. Формально этот параметр совсем не обязательно должен иметь тип 1пс, но поскольку индексаторы, как правило, применяютгя для индексирования массивов, то чаще всего используется целочисленный тип данного параметра. В теле индексатора определены два аксессора (т.е. средства доступа к данным): сег и зе г. Аксессор подобен методу, за исключением того, что в нем не объявляется тип возвращаемого значения или параметры. Аксессоры вызываются автоматически при использовании индексатора, и оба получают индекс в качестве параметра. Так, если индексатор указывается в левой части оператора присваивания, то вызывается аксессор яег и устанавливается элемент, на который указывает параметр индекс.

В противном случае вызывается аксессор пес и возвращается значение, соответствующее параметру индекс. Кроме того, аксессор зег получает неявный параметр ча1пе, содержащий значение, присваиваемое по указанному индексу. Преимущество индексатора заключается, в частности, в том, что он позволяет полностью управлять доступом к массиву, избегая нежелательного доступа. В качестве примера рассмотрим программу, в которой создается класс Га115оГЬАггау, реализующий массив для выявления ошибок нарушения границ массива, а следовательно, для предотвращения исключительных ситуаций, возникающих во время выполнения в связи с индексированием массива за его границами.

Для этого массив инкапсулируется в качестве закрытого члена класса, а доступ к нему осуществляется только с помощью индексатора. При таком подходе исключается любая попытка получить доступ к массиву за его границами, причем эта попытка пресекается без катастрофических последствий для программы. А поскольку в классе Га11БоГЬАггау используется индексатор, то к массиву можно обращаться с помощью обычной формы записи. // Использовать индексатор для создания отказоустойчивого массива.

ияьпс ВуягеэГ с1аяя Гат1эоГСАггау ) Ьпс)] а; // ссылка на базовый массив риЬ11с 1пс Ьепдсьг // открытая переменная длины массива Глава 10. Индаксаторы и свойства 305 рцЫ1с Ьоо1 ЕггГ1ас; // обозначает результат последней операции // Построить массив заданного размера. рцЫ1с Га11Яотслггау(1пс ялге) ( а = лен 1лз[я1ге]; Ьепдса = ялте; ) // Это индексатор для класса Га11Яотслггау. риЫЯс Гпа ГЫя [ало Янах] ( // Это аксессор оес. Оег ( 11(о)с(1пбех)) ( ЕггГ1ав = Га1яе; гегцгп а[1пбех]; ) е1яе ( ЕггГ1ас = Ггце; гегогп 0; ) ) Это аксессор яес. яес ( 11(оК(1пбех) ) ( а[1пбех] = ча1це; ЕггГ1ас = Га1яе," ) е1яе ЕггГ1ас = Ггце; ) Возвратить логическое значение Сгце, если индекс находится в установленных границах.

рггчасе Ьоо1 оЛ(лпс 1пбех) 11(1пбех >= О Ь 1пбех < ОепдГЫ гесцгп Ггце; геапгп Га1яе; ) ) // Продемонстрировать применение отказоустойчивого массива. с1аяя ГЯОеио ( вгаглс чо16 Магд() ( Гаг1яотгАггау Гя = пен Га11яосглггау(5)у Япг х; Выявить скрытые сбои. Сопяо1е.Хг1се11пе("Скрытый сбой."); ГОГ(ГПГ 1=0; 1 < (ГЯ.ЬЕПОГЬ * 2); 1++) Ге[1) = 1*10; Гог(1па 1=0; г < (Гя.ьепоСЬ * 2); 1+т) ( х = Гя[).); 11(х != — 1) Сопяо1е.иглае(х + " "); ) 306 Часть ). Язык С() Сопяо1е.игггеь1пе()," !/ А теперь показать сбои.

сопяо1е.хгссеьгпе("1псбой с уведомлением об ошибках.") бог(ьпс 1=03 1 < (Гя.ъепэгп * 2); 1++) ( Гя(1) = 1*103 1Г(тя.Еггг1ад) сопяо1е.хг1сеь1пе("гя[" + 1 + ") вне границ"); ) бог(гпг 1=03 1 < (Гя.сепэгп * 2) ) 1++) ( х = Ге[1); гс()тя.вггг1ад) Сопво1е.нгьСе(х е1яе Сопяо1е.нггсеъгпе("Гя[" ь 1 + ") вне границ"); Вот к какому результату приводит выполнение этой программы. Скрытый сбой. 0 10 20 30 40 0 0 0 О 0 Сбой с уведомлением об ошибках.

Ге[5) вне границ Гя[б) вне границ Ге[7) вне границ Гя(8] вне границ Ге[9) вне границ 0 10 20 30 40 Ге[5] вне границ Гя[б) вне границ Ге[7] вне границ Ге[8] вне границ Гя(9) вне границ Индексатор препятствует нарушению границ массива. Внимательно проанализируем каждую часть кода индексатора.

Он начинается со следующей строки. рцььгс 1пС Скгя[ьпг гпбех] ( В этой строке кода объявляется индексатор, оперирующий элементами типа Епг. Ему передается индекс в качестве параметра 1пбех. Кроме того, индексатор объявляется открытым (рц)011с), что дает возможность использовать этот индексатор в коде за пределами его класса. Рассмотрим следующий код аксессора ОеС. Оес ( 1Г(о)г(1пбех)) ( Еггг1аэ = Га1яе," гегцгп а[ьпбех); ) е1яе ( Еггг1ад = Сгцег гесцгп О," ) Глава 10.

Индвксаторы и свойства 307 Аксессор оег предотвращает ошибки нарушения границ массива, проверяя в первую очередь, находится ли индекс в установленных границах. Эта проверка границ выполняется в методе ой ( ), который возвращает логическое значение С сие, если индекс правильный, а.иначе — логическое значение та 1 ее. Так, если указанный индекс находится в установленных границах, то по этому индексу возвращается соответствующий элемент. А если индекс оказывается вне установленных границ, то никаких операций не выполняется, но в то же время не возникает никаких ошибок переполнения.

В данном варианте класса Еа11Богслггау переменная Еггр1ас содержит результат каждой операции. Ее содержимое может быть проверено после каждой операции на предмет удачного или неудачного выполнения последней. (В главе 13 будет представлен более совершенный способ обработки ошибок с помощью имеющейся в С)) подсистемы обработки исключительных ситуаций, а до тех пор можно вполне обойтись установкой и проверкой признака ошибки.) А теперь рассмотрим следующий код аксессора зев, предотвращающего ошибки нарушения границ массива. веп ) тг(ок)1пбех) ) ) а(гпйех) = та1ие~ Еггр1ас = Га1веу ) е1ве Еггк1аЧ = огне; ) Если параметр 1пс)ех метода ок () находится в установленных пределах, то соответствующему элементу массива присваивается значение, передаваемое из параметра ча1ые.

В противном случае устанавливается логическое значение Ггне переменной Еггр1ао. Напомним, что та1не в любом аксессорном методе является неявным параметром, содержащим присваиваемое значение. Его не нужно (да и нельзя) объявлять отдельно. Наличие обоих аксессоров, пес и вес, в индексаторе не является обязательным. Так, можно создать индексатор только для чтения, реализовав в нем один лишь аксессор оес, или же индексатор только для записи с единственным аксессором вес, Перегрузка индексаторов Индексатор может быть перегружен.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6556
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее