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

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

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

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

В этом случае для выполнения выбирается тот вариант индексатора, в котором точнее соблюдается соответствие его параметра и аргумента, указываемого в качестве индекса. Ниже приведен пример программы, в которой индексатор массива класса т а11Яогглггау перегружается для индексов типа с)ооЬ1е.

При этом индексатор типа с)онЬ1е округляет свой индекс до ближайшего целого значения. // перегрузить индексатор массива класса га11зогсяггау. ивьпэ Яуввеьо с1авв Га11зотгхггау ) 1пс() а; // ссылка на базовый массив рпЬ1тс тпС Ьепдгш // открытая переменная длины массива 308 Часть!. Язык С() рцЬ11с Ьоо1 Еггу1ад; // обозначает результат последней операции // Построить массив заданного размера. рцЬ11с Га11зотсйггау(ьпс вьге) ( а = пеи 1пг[яьхе]; Ьепдгь = ягхе; ) Это индексатор типа Епг для массива Ра11зо1гйггау. рцЬ11с 1пс СЬ1я[упс Епбех] ( // Это аксессор дев. дев ( 11(ох(1пбех)) ( Еггу1ад = Еа1яе; гегцгп а[1пбех]у ] е1ве ( Еггу1ад = огоев гегцгп О; ) // Это аксессор яео. яег ( 11(о)с(гпс1ех)) ( а[1пбех] = ча1це; Еггр1ад = та1яе; ) е1яе Еггу1ад = Сгце) ) /* Это еше один индексатор для массива Ра11зоссйггау. Он округляет свой аргумент до ближайшего целого индекса. */ рцьььс Епс Гьья [с(оцЬ1е Ьах] // Это аксессор дес.

дег Епо Епбех; // ОкрУглить до ближайшего целого. 11( (1бх — (1по) 1бх) < 0.5) 1пбех = (гпо) 1бх; е1яв Епбех = (Епс) убх + 1; 11(о)ь(гпбех)) ( Еггр1ад = Еа1яе; гегцгп а[1пйех]; ) е1яе ( Еггу1ад = Ггце; геоцгп О; ) ) // Это аксессор яео. яес [ гпг 1пс(ех; Глава 10.

Индексаторы н свойства 309 О Округлить до ближайшего целого. 11( (гбх — (Ьпс) Ьдх) < 0.5) Ьпбех = (ъпс) гбх; е1яе 1пбех = (Ьпс) 1дх + 1; 16(о)г(ьпбех)) ( а[1пг(ех] = ча1пе; ЕггГ1ас = Га1яе; ) е1яе ЕггГ1ао = Ггое; ) Возвратить логическое значение Ггце, если !/ индекс находится в установленнмх границах. рггчасе Ьоо1 ой(гпг Ьпбех) ( 16(1пбех >= 0 в гпбех < Ьепдсн) гесогп Сгое~ геспгп Га1яе1 О Продемонстрировать применение отказоустойчивого массива.

с1авя ГЗПешо ( ясавгс чогб Магп() ( Га115осслггау Гя = пен Га115оссяггау(5); /! Поместить ряд значений в массив Гя. Хог(1пг 1=0; 1 < Гя.ьепоСЬ1 1++) Ге[1] = 1; А теперь воспользоваться индексами типа 1пг и СооЬ1е для обрашения к массиву. Сопяо1е.иг1сеъ1пе ("Гя [1]: " + Гя [1] ) ) Сопяо1е.иг1сеьвпе(5ая[2]: " + Ге[2]); Сопяо1е.нггсеьвпе(5вя[1.1]: " + Ге[1.1])) Сопяо1е.иг).сеЬЬпе(5вя[1.6): " + Ге[1.6]); При выполнении втой программы получается следующий результат. Ге[1): 1 Ге[2]: 2 Ге[1.1]: 1 Ге[1.6]: 2 Как показывает приведенный выше результат, индексы типа с(оцЬ1е округляются до ближайшего целого значения. В частности, индекс 1 .

1 округляется до 1, а индекс 1. 6 — до 2. Представленный выше пример программы наглядно демонстрирует правомочность перегрузки индексаторов, но на практике она применяется нечасто. Как правило, индексаторы перегружаются для того, чтобы использовать объект определенного класса в качестве индекса, вычисляемого каким-то особым образом. 310 Часть!. язык С() Индексаторы без базового массива Следует особо подчеркнуть, что индексатор совсем не обязательно должен оперировать массивом. Его основное назначение — предоставить пользователю функциональные возможности, аналогичные массиву.

В качестве примера в приведенной ниже программе демонстрируется индексатор, выполняющий роль массива только для чтения, содержащего степени числа 2 от О до 15. Обратите внимание на то, что в этой программе отсутствует конкретный массив. Вместо этого индексатор просто вычисляет подходящее значение для заданного индекса. // Индексаторы совсем не обязательно должны оперировать отдельными массивами. оягпд Буясешг с1аяв Рнгобтно ( Доступ к логическому массиву, содержаиему степени числа 2 от 0 до 18. */ рнб11с 1пг Спгя(гпг 1псех) ( // Вычислить и возвратить степень числа 2. дес ( ТГ((ьпбех >= О) ая (гпбех < 18)) гесагп риг(гпбех) е1яе гегогп -1г ) Аксессор яеС отсутствует. ) 1пС рнг (Тпс.

р) ( Тпс гево1с = 1~ бог(1пС 1=0; г < р; 1++) геян1С *= 2; гегнгп геяп1С; ) с1авя Пяернгобтно яоаггс чогб Маьп() Рнготтно рнг = пен Рнгогтно() Сопяо1е.Хггге("Первые 8 степеней числа 2: ")) бог(гпг 1=0; 1 < 8) 1++) Сопяо1е.Хггге(рнг[1) + " ")( Сопво1е.нг1гепьпе()г СОПВО1Е.ХГТСЕ(кя Зтс НЕКОтсрЫЕ ОШИбКИ: ")Г Сопво1е.нгТСе(рнг[-1] + " " + рис[17))г Сопяо1е.иг1Сеь1пе(); Глава 10. индексаторы и свойства 311 Вот к какому результату приводит выполнение этой программы. Первые 8 ствпеней числа 2: 1 2 4 8 16 32 84 128 А зто некоторые ошибки: -1 -1 Обратите внимание на то, что в индексатор класса ригогтыо включен только аксессор цет, но в нем отсутствует аксессор зеб. Как пояснялось выше, такой индексатор служит только для чтения.

Следовательно, объект класса рыг() г тыо может указываться только в правой части оператора присваивания, но не в левой его части. Например, попытка ввести следующую строку кода в приведенную выше программу не приведет к желаемому результату. рнг(0] = 11; // не подлежит компиляции Такой оператор присваивания станет причиной появления ошибки во время компиляции, поскольку для индексатора не определен аксессор веб.

На применение индексаторов накладываются два существенных ограничения. Во-первых, значение, выдаваемое индексатором, нельзя передавать методу в качестве параметра гег или оцс, поскольку в индексаторе не определено место в памяти для его хранения. И во-вторых, индексатор должен быть членом своего класса и поэтому не может быль объявлен как вгабьс. Многомерные индексаторы Индексаторы можно создавать и для многомерных массивов. В качестве примера ниже приведен двумерный отказоустойчивый массив. Обратите особое внимание на объявление индексатора в этом примере. Двумерный отказоустойчивый массив.

цзгпо Яузсеш( с1авз Га118отспггау2О ( 1пг(,) а," // ссылка на базовый двумерный массив 1пг гона, со1в; // размеры массива рцЫтс ьпт Ьепчсь( // открытая переменная длины массива рцЬ11с Ьоо1 Егг81ач; // обозначает результат последней операции Построить массив заданных размеров. рцЫтс Гаг18отслггау2О(1пс г, 1пс с) ( гона со15 = с( а = пен гпс(гона, со1в)Г Ьепдсь = гоев * со1зг // Это индексатор для класса Га118огслггау2О. рцЫтс тпс гЫз(гпг 1пбех1, 1пс гпбех2) ( Это аксессор Чес. дег ( 11(ок(1пбех1, гпбех2)) ( Егг81ао = Еа1зег гесцгп а(1пбех1, гпдех2)Г ) е1ве ( 312 Часть ].

Язык С() Еггр1ад = Сгце) гесцгп Ор ) ) // Ото аксессор яеС. яес ( гб(оь(ьпбех1, гпбех2)) ( а[гпбех1, 1пдех2] = ча1ие; БггГ1аО = ба1яе; е1яе Еггр1ао = Сгце; ) // Возвратить логическое значение Сгце, если // индексы находятся я установленных пределах. рг1наге Ьоо1 ос(гпг гпбех1, гпг Епбех2) ( 16(гпбех1 >= 0 а 1пдех1 < гоня а ьпбех2 >= 0 а гпбех2 < со1я) гесцгп Сгце; гесцгп Га1яе; ) ) Продемонстрировать применение двумерного индексатора. с1аяя Тно01пбехегбешо ( ясасгс чогб Ма1п() ( Еа115обгаггау20 бя = пен Еа11зобС)(ггау20(3, 5)," гпс х) // Выявить скрытые сбои. Сопяо1е.иг1Се11пе("Скрытый сбой."); бог(1пс г=О; г < б; г+т) ба[1, г] = с*10; бог(1пг г=О; г < б; 1++) х = бя[г,г]; 16(х )= -1) Сопяо1е.иг1ге(х + " ") ) Сопяо1е.иг1Се11пе (); // А теперь показать сбои.

Сопяо1е.иг1Сеьспе("1псбой с уведомлением об ошибках."); бог(1пс 1=0; 1 < 6; 1++) ( бя[г 1] = 1*10; 11(бя.ЕггР1ад) сопяо1е.хг1сеь1пе("бя[" + г + ", " т 1 + ") вне границ"); ) ЕОГ(1ПС с=06 Г < 66 1Ь+) ( х = гя[1 1]; 16(!Йя.кггР1ад) Сопяо1е.нгаге(х + " "); Глава 10. Индвксагоры и свойства 313 е1яе Сспяс1Е.НГ1СЕЬ1ПЕ(птя(" + 1 Е ", " Е 1 + "] ВНЕ ГраНИц" ); Вот к какому результату приводит выполнение этого кода: Скрытый сбой.

0 10 20 0 0 0 Сбой с уведомлением об ошибках. Ге[3, 3] вне границ Ге[4, 4] вне границ Ге[5, 5) вне границ 0 10 20 Ге[3, 3] вне границ Ге[4, 4] вне границ Гя(5, 5] вне границ Свойства Еще одной разновидностью члена класса является своисглво. Как правило, свойство сочетает в себе поле с методами доступа к нему. Как было показано в приведенных ранее примерах программ, поле зачастую создается, чтобы стать доступным для пользователей объекта, но при этом желательно сохранить управление над операциями, разрешенными для этого поля, например, ограничить диапазон значений, присваиваемых данному полю. Этой цели можно, конечно, добиться и с помощью закрытой переменной, а также методов доступа к ее значению, но свойство предоставляет более совершенный и рациональный путь для достижения той же самой цели. Свойства очень похожи на индексаторы.

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

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

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

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