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

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

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

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

Бьон () ( Сопяо1е. Иг1сеьгпе (); с = Ь + 10) // сложить объект типа ТЬгеео и целое значение типа гпс Сопзо1е.нгьсе("Результат сложения Ь + 10: ")) с. Бьон (); Сопзо1е.нггсе11пе (); с = 15 + Ь( // сложить целое значение типа 1пс и объект типа ТЬгееб Сопзо1е.иггсе("Результат сложения 15 + Ь: ")) с.БЬон(); ) Выполнение этого кода дает следующий результат. Координаты точки а: 1, 2, 3 Координаты точки Ь: 10, 10, 10 Результат сложения а + Ь: 11, 12, 13 Результат сложения Ь + 10: 20, 20, 20 Результат сложения 15 + Ь: 25, 25, 25 Перегрузка операторов отношения Операторы отношения, например == и <, могут также перегружаться, причем очень просто.

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

Один объект считается больше другого, если он находится дальше от начала координат. А кроме того, один объект считается меньше другого, если он находится ближе к началу координат. Такой вариант реализации позволяет, в частности, определить, какая из двух заданных точек находится на большей сфере. Если же ни один из операторов не возвращает логическое значение сгце, то обе точки находятся на одной и той же сфере. Разумеется, возможны и другие алгоритмы упорядочения. 282 Часть (. Язык С№ ив1пц Яувгеы( // Класс длл хранениа трехмерных координат. с1авв ТЛгеео ( гпс х, у, г) // трехмерные координаты рпЬ1гс ТЛгеео[) ( х = у и = 0; ) рпьзгс ТЛгеео(упс 1, Тпс 7, Тпя К) ( х = г; у = 17 г ор1, ТЛгеео ор2) * ор1.у + ор1.г * ор1.г) < * ор2.у + ор2.г * ор2.г)) ор1, ТЛгеео ор2) * ор1.у е ор1.г * ор1.г) > * ор2.у + ор2.г * ор2.г)) // Перегрузить операторы < и >.

// Перегрузить оператор <. рпЬ1гс всасус Ьоо1 орегаяог <(ТЬгеео ( 11(МаГЛ.Яогс(ор1.х * ор1.х + ор1.у Ма<Л.Яогс (ор2.х * ор2.х + ор2.у Гзоихо СГПЕ7 е1ве гевпгп Га1ве( ) Перегрузить оператор >. роьзгс вяас1с Ьоо1 орегагог >(ТЛгеео ( 1й(МаГЛ.Яя(гс (ор1.х * ор1.х + ор1.у Маоь.яя)гс (ор2.х * ор2.х + ор2.у геепгп Ггпе; е1ве геворга Та1ве7 ) // Вывести координаты Х, У, 2.

рпЬ11с чо10 ЯЛон() ( Сопво1е.нг1сеьапе(х + ", " + у + ) ) с1авв ТЛгееооеыо ( всас).с чо1<( Магп() ( ТЛгееО а = пен ТЬгеео(5, б, 7)7 ТЬгееО Ь = пен ТЬгееО(10, 10, 10); ТЛгеео с = пен ТЛгеео(1, 2, 3)) ТЬгеео с( = пен ТЬгеео(6, 7, 5); Сопво1е.кг11е("Координаты точки а а.ЯЬон()) Сопво1е.мг1се("Координаты точки Ь Ь.ЯЛон()( Сопво1е.иг1яе("Координаты точки с с.ЯЬон()7 Сопво1е.кг1ге("Координаты точки б б.ЯЛон () 1 Сопво1е.мг1ге11пе()7 )' )( )( )/ Глава 9.

Перегрузка операторов 283 гт(а > с) Сспзс1е.иг1се11пе("а > с истинно"); 11(а < с) сспзс1е.игггеыпе("а < с истинно"); гт(а > Ы Сспзс1е.иг1ге11пе("а > Ь истинно"); 11(а < Ь)-Сспзс1е.нгьсеЬгпе("а < Ь истинно"); 11(а > б) Сспзс1е.нггсеъгпе("а > б истинно"); е1ае 1Г(а < щ Сспас1е.Иггсеъгпе("а < б истинно"); е1зе Сспас1е.нг1сеьгпе("Точки а и б находятся на одном расстоянии " "ст начала отсчета"); Вот к какому результату приводит выполнение этого кода. Координаты точки а: 5, б, 7 Координаты точки Ь.

"10, 10, 10 Координаты точки с: 1, 2, 3 Координаты точки б: б, 7, 5 а > с истинно а < Ь истинно Точки а и б находятся на одном расстоянии ст начала отсчета На перегрузку операторов отношения накладывается следующее важное ограничение: они должны перегружаться попарно. Так, если перегружается оператор <, то следует перегрузить и оператор >, и наоборот. Ниже приведены составленные в пары перегружаемые операторы отношения. И еще одно замечание: если перегружаются операторы == и ! =, то для этого обычно требуется также переопределить методы ()Ь7 ес с . К<(на 1з ( ) и С)Ь1 ест .

Сеспазпсобе () . Эти методы и способы их переопределения подробнее рассматриваются в главе 11. Перегрузка операторов ~гие и йа1зе Ключевые слова Ьгне и Га1зе можно также использовать в качестве унарных операторов для целей перегрузки. Перегружаемые варианты этих операторов позволяют определить назначение ключевых слов Ггпе и Та1зе специально для создаваемых классов. После перегрузки этих ключевых слов в качестве унарных операторов для конкретного класса появляется возможносп использовать объекты этого класса для управления операторами 1Г, ИЬ11е, Гог и бо-ИЬ11е или же в условном выражении?. Операторы ьгие и та1зе должны перегружаться попарно, а не раздельно.

Ниже приведена общая форма перегрузки этих унарных операторов. риЬ11с зсасгс Ьссг срегассг Сгпе (тил параметра операнд) ( г'/ возврат логического значения ггне или Га1зе. 284 Часть 1. Язык С() рпЫгс ягаг1с Ьоо1 орегагог Га1яе(тип параметра операнд) ( Возврат логического значения Ггпе или Еа1яе. ) Обратите внимание на то, что и в том и в другом случае возвращается результат типа Ьоо1.

Ниже приведен пример программы, демонстрирующий реализацию операторов Ггпе и га1яе в классе ТЬгееР. В каждом из этих операторов проверяется следующее условие: если хотя бы одна из координат объекта типа ТЬгееО равна нулю, то этот объект истинен, а если все три его координаты равны нулю, то такой объект ложен. В данном примере программы реализован также оператор декремента исключительно в целях демонстрации. // Перегрузить операторы Ггпе и Га1яе для класса ТЬгееО. о51ПЧ Зуягею) // Класс для хранения трехмерных координат. с1авя ТЬгееО ! 1пг х, у, г) // трехмерные координаты рпЬ1гс ТЬгеео() ( х = у = г = О) ) рпЫгс ТЬгеео(1пс г, 1пс З, гпс Х) ( х = г) у = З) г = Х) ) // Перегрузить оператор Ггпе. рпЬ11с ясас1с Ьоо1 орегасог Ггпе(ТЬгеео ор) ( 11((ор.х != 0) )) (ор.у (= 0) )) (ор.г != 0)) геспгп Ггпе) // хотя Оы одна координата не равна нулю е1яе гегпгп Га1ве; Перегрузить оператор Га1ве. роь11с ягаггс ьоо1 орегаьог га1яе(тьгееО ор) ( гс((ор.х == 0) вв (ор.у == О) ав (ор.г == 0)) гегпгп ггое) // все координаты равны нулю е1яе геспгп Га1яе; ) // Перегрузить унарный оператор рпЫгс всас1с тЬгееО орегасог — (тЬгеео ор) ( ТЬгеео геяп1Г = пен ТЬгееО(); // Возвратить результат декрементирования.

гевп1Ы х = ор.х — 1; геяп1г.у = ор.у — 1; геяп1г.г = ор.г — 1; гегогп геяп1г; Пава 9. Перегрузка операторов 288 г'7 Вывести координаты Х, у, 2. рць11с чогс Яьон() ( сопво1е.иг1геь1пе(х т ", " + у т ", " + г)г ) с1авв Тгцета1вебещо ( ягас1с тога нагл() ( Тьгеео а = пен Тьгеео(5, б, 7)) Тьгеео Ь = пен Тьгеео(10, 10, 10)) Тьгееп с = пен Тьгеео(0, О, О)) Сопяо1е.пгтге("Координаты точки а: ")г а. Яьон (); Сопво1е.Игтье("Координаты точки Ь: "); Ь. ЯЛ (); Сопво1е.Хггье("Координаты точки с: "); с.ЯЛон()г Сопво1е.нггсеЬ1пе(); 1г(а) Сопяо1е.игтгеь1пе("Точка а истинна.") е1яе Сопво1е.нгггеьвпе("Точка а ложна."); 12(Ь) Сопва1е.Игтсеьгпе("Точка Ь истинна."); е1яе Сопяо1е.нгтсеьтпе("Точка Ь ложна."1; 12(с) Сопяо1е.игггеьтпе("Точка с истинна.") е1яе Сопяо1е.нгтсевзпе("Точка с ложна.")г Сопяо1е.игтсе11пе() Сопяо1е.нгтье11пе("Управление циклом с помощью объекта класса Тьгеео."): г)о [ Ь.ЯЛон(); Ь вЂ” —; ньг1е (Ь) ' Выполнение этой программы приводит к следующему результату.

Координаты точки а: 5, б, 7 Координаты точки Ь: 10, 10, 10 Координаты точки с: О, О, 0 Точка а истинна Точка Ь истинна Точка с ложна Управление циклом с помощью объекта класса Тьгееп. 10, 10, 10 286 Часть 1. язык Ся' 9, 9, 9 в, в, в 7, 7, 7 б, б, б 5, 5, 5 з, з, з 2, 2, 2 1, 1, 1 Обратите внимание на то, как объекты класса ТЬгееР используются для управления условным оператором 15 и оператором цикла с)о-ып11е. Так, в операторах 15 объект типа ТЬгееО проверяется с помощью оператора сгпе.

Если результат этой проверки оказывается истинным, то оператор 1 Т выполняется. А в операторе цикла г)о-нп11е объект Ь декрементируется на каждом шаге цикла. Следовательно, цикл повторяется до тех пор, пока проверка объекта Ь дает истинный результат, т.е. этот объект содержит хотя бы одну ненулевую координату. Если же окажется, что объект Ь содержит все нулевые координаты, его проверка с помощью оператора Оспе даст ложный результат и цикл завершится. Перегрузка логических операторов Как вам должно быть уже известно, в С)) предусмотрены следующие логические операторы: й, ), !, й й и ! ) .

Из них перегрузке, безусловно, подлежат только операторы й, ) и ! . Тем не менее, соблюдая определенные правила, можно извлечь также пользу из укороченных логических операторов й й и ! ) . Все эти возможности рассматриваются ниже. Простой способ перегрузки логических операторов Рассмотрим сначала простейший случай. Если не пользоваться укороченными логическими операторами, то перегрузку операторов й и ) можно выполнять совершенно естественным путем, получая в каждом случае результат типа Ьоо1. Аналогичный результат, как правило, дает и перегружаемый оператор ! .

Ниже приведен пример программы, в которой демонстрируется перегрузка логических операторов !, й и ) для объектов типа ТпгееР. Как и в предыдущем примере, объект типа ТЬгее0 считается истинным, если хотя бы одна из его координат не равна нулю. Если же все три координаты объекта равны нулю, то он считается ложным. О Простой способ перегрузки логических операторов // !, ) и й лля объектов класса ТпгееР.

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

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

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

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