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

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

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

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

овйпч зуасеиг Класс для хранения трехмерных координат. с1ава ТвгееО ) йпс х, у, хг // трехмерные координаты рпЫйс ТлгееО() ( х = у = х = О) ) риЫ1с ТнгееР)йпг 1, йпв 7, йпв Х) ( х = йг у = 7; г // Перегрузить логический оператор рпЬ11с явавйс Ьоо1 орегавог )(ТЛгееО ор1, ТЛгееО ор2) ( 15( ((ор1.х != О) ! ) (ор1.у != О) ) ) (ор1.г != О) ) ! ((ор2.х != О) )) (ор2.у != О) )) (ор2.г )= О)) ) гегогп лгое) е1яе геспгп Йа1яег // Перегрузить логический оператор й. роь1гс вгасйс ьоо1 орегагог й(тлгееО ор1, тлгееО ор2) ( 1Т( ((ор1.х != О) йй (ор1.у != О) йй (ор1.г 1= О) ) й ((ор2.х )= О) йй (ор2.у != О) йй (ор2.г (= О) ) ) гегогп ггие) е1ве геоогп Га1яег ) // Перегрузить логический оператор !.

роЬ11с воавйс Ьоо1 орегасог !(ТЛгееО ор) ( 10((ор.х )= О) () (ор.у != О) () (ор.г != О) ) геспгп Га1ве) е1яе геопгп Ггое) ) // Вывести координаты Х, у, 2. роЬ1гс чо1г( ЯЛом() ( Сопво1е.пггсеОТпе(х е ", " + у + ", " + г) ) ) ) а: ")г Ь: ")) с: ")( ТГ(!а) Сопяо1е.пггсевйпе("Точка а ложна."); га(!Л) сопяо1е.иг1сеЬгпе("Точка Ь ложна.")1 га(!с) Сопяо1е.иг1ое11пе("Точка с ложна."); Сопво1е.пг1се11пе() с1аяв Тгпеуа1веееио ( яоас1с чо1б Маго() ( ТЛгееО а = пем ТЛгееО(5, б, 7)г ТЛгееО Ь = пем ТЛгееО(10, 10, 10) ТЛгееО с = пем ТЛгееО(0, О, О); Сопво1е.Иг1ге("Координаты точки а.ЯЛом(); Сопяо1е.кггое("Координаты точки Ь.ЯЛом() ' Сопяо1е.пггсе("Координаты точки с.ЯЛом(); Сопяо1е.пггдеЬйпе(); Гааза 9. Перегрузка операторов 287 288 Часть ).

Язык С)г 11(а ь ь) сопао1е.нггсеьвпе("а а ь истинно."); е1зе Сопзо1е.нггпеьгпе("а Ь Ь ложно."); 11(а 6 с) Сопао1е.нг1геъьпе("а Ь с истинно.") е1зе Сопао1е.иг1пеъ1пе("а Ь с ложно."); 11(а ) Ь) Сопзо1е.нггпеььпе("а ) Ь истинно."); е1зе Сопао1е.игьсеъ1пе("а ( Ь ложно."); гт(а ) о) Сопао1е.иггпеъгпе("а ) с истинно.")! е1зе Сопво1е.нг1сеъгпе("а ) с ложно."); ) ) При выполнении этой программы получается следующий результат. Координаты точки а: 5, б, 7 Координаты точки Ь: 10, 10, 10 координаты точки с: О, О, 0 Точка о ложна. а а Ь истинно.

а $ с ложно. а ) Ь истинно. а ( с истинно. При таком способе перегрузки логических операторов а, ) и ) методы каждого из них возвращают результат типа Ьоо1. Это необходимо для того, чтобы использовать рассматриваемые операторы обычным образом, т.е. в тех выражениях, где предполагается результат типа Ьоо1. Напомним, что для всех встроенных в С)) типов данных результатом логической операции должно быть значение типа Ьоо1. Поэтому вполне разумно предусмотреть возврат значения типа Ьоо1 и в перегружаемых вариантах этих логических операторов.

Но, к сожалению, такой способ перегрузки пригоден лишь в том случае, если не требуются укороченные логические операторы. Как сделать укороченные логические операторы доступными для применения Для того чтобы применение укороченных логических операторов ь а и ) ) стало возможным, необходимо соблюсти следующие четыре правила. Во-первых, в классе должна быть произведена перегрузка логических операторов а и (. Во-вторых, перегружаемые методы операторов а и ) должны возвращать значение того же типа, что и у класса, для которого эти операторы перегружаются.

В-третьих, каждый параметр должен содержать ссылку на объект того класса, для которого перегружается логический оператор. И в-четвертых, для класса должны быть перегружены операторы с где и Та1зе. Если все эти условия выполняются, то укороченные логические операторы автоматически становятся пригодными для применения. В приведенном ниже примере программы показано, как правильно реализовать логические операторы ь и ( в классе тьгее)7, чтобы сделать доступными для применения укороченные логические операторы ь а и ( ). Глава 9. Перегрузка операторов 288 /* Более совершенный способ перегрузки логических операторов ), ) и Я для объектов класса ТЬгееб. Б этом варианте укороченные логические операторы яя и становятся доступныыи для применения автоматически. */ ияупц Буягеш; Класс для хранения трехмерных координат.

с1авя ТЬгееО ( Тпг х, у, г; // трехмерные координаты риЬ11с ТЬгееб() ( х = у = г = 0; ) риь11с тьгееО(гпг 1, Тпг 2, Тпг м) ( х = Тг у = Ог г = кг ) // Перегрузить логический оператор ) для укороченного вычисления. риЬ11с ягасгс ТЬгееб орегасог )(ТЬгееб ор1, ТЬгееб ор2) ( 11( ((ор1.х != 0) ( ( (ор1.у != 0) ) ) (ор1.г != 0) ) ((ор2.х ! — О) ) ) (ор2.у ! —. О) ) ) (ор2.г )= 0) ) ) гесигп пен ТЬгееб(1, 1, 1)г е1яе гесигп пен ТЬгееб(0, О, 0); Перегрузить логический оператор я для укороченного вычисления. риЬ11с ягасгс ТЬгееб орегасог я(ТЬгееб ор1, ТЬгееО ор2) ( 11( ((орт.х != 0) яя (ор1.у != 0) яя (ор1.г != 0)) я ((ор2.х != 0) яя (ор2.у != 0) ая (ор2.г != 0) ) ) гесигп лен ТЬгееб(1, 1, 1); е1яе гесигп пен ТЬгееО(0, О, О); ) // Перегрузить логический оператор !.

риЬ11с ясасгс Ьоо1 орегасог !(ТЬгееб ор) ( ТЕ(ор) гегигп Га1яег е1яе гесигп Сгие) ) // Перегрузить оператор Ггие. риЬ11с яиаизс Ьоо1 орегаиог Ггие(ТЬгееО ор) ( 11((ор.х != О) )) (ор.у )= О) )) (ор.г != 0)) гегигп ггие; // хотя бы одна координата не равна нулю е1яе гегигп га1яет // Перегрузить оператор Га1яе. риЬ11с ясасас Ьоо1 орегасог Еа1яе(ТЬгееР ор) ( 1Г((ор.х == 0) ая (ор.у == О) яа (ор.г == О)) гесигп Ггие; // все координаты равны нулю е1яе 290 Часть!. Язык С№ гегигп Еа1яе; Ввести координаты Х, Х, Е. роЬ11с чо1б ВЬон() ( Сопво1е.ХгусеЬТпе(х в ", " т у в ", " + я); ) ) с1авв Тгпера1веОеио ( ягас№с чо1с Иа1п() ( ТЬгееО а = пен ТЬгееО(5, 6, 7); ТЬгееО Ъ = пен ТЬгееО(10, 10, 10) ТЬгееО с = пен ТЬгееО(0, О, О)) Сопяо1е.Хг1ге("Координаты точки а: "); а.

ВЬон (); Сопво1е.ыггсе("Координаты точки Ь: "); Ь. Вдон (); Сопво1е.ыг1ге("Координаты точки с: "); с . БЬон () ." Сопяо1е.ыгвсеЫпе(); 11(а) Сопяо1е.иггсе11пе("Точка а истинна.") 11(Ь) Сопво1е.нг1сеОгпе("Точка Ъ истинна.") 11(с) Сопво1е.иггсеЫпе("Точка с истинна."! 11((а) Сопяо1е.иг1сеОТпе("Точка а ложна.") 11((Ь) Сопяо1е.ыг1сеЫпе("Точка Ь ложна.") 11()с) Сопяо1е.игввеЫпе("Точка с ложна.") Сопяо1е.ыгувеОТпе() сопво1е.хгвгеОТпе("применение логических операторов а и )")) 11(а й ь) сопяо1е.хггсе11пе("а в Ь истинно.")у е1яе Сопво1е.игусеЫпе("а й Ь ложно."); 11(а й с) сопяо1е.хггсе11пе("а в с истинно."); е1яе Сопяо1е.иг1се11пе("а в с ложно."); 11(а ( Ь) Сопво1е.иг1сед№пе("а ) Ь истинно."); е1яе Сопво1е.иг1ве11пе("а ( Ь ложно."); 11(а ( с) Сопво1е.иг1ве11пе("а ) с истинно."); е1яе Сопяо1е.иг№сеЫпе("а ) с ложно."); Сопво1е.иг1се11пе() // А теперь применить укороченные логические операторы.

Сопяо1е.ыгггеЬТпе("Применение укороченных" "логических операторов йя и (("); 11(а вв Ь) Сопво1е.ыг1ве11пе("а вв Ь истинно."); е1ве Сопво1е.нг1се51пе("а ВВ Ь ложно."); Гьава 9. Перегрузка операторов 291 ьг(а йь с) сопяо1е.хгйгеь1пе("а ьь с истинно."); е1яе Сопяо1е.кгьсе11пе("а ьй с ложно."); 1Т(а )) Ь) Сопяо1е.кгьяеььпе("а () Ь истинно."); е1яе. Сопяо1е.иггяеььпе("а )) Ь ложно.")," 1Е(а )) с) Сопяо1е.игьсеььпе("а (( с истинно."); е1яе Сопяо1е.иггсеььпе("а () с ложно."); ) Выполнение этой программы приводит к следующему результату.

Координаты точки а: 5, б, 7 Координаты точки Ъ: 10, 10, 10 Координаты точки с: О, О, 0 Точка а истинна Точка Ь истинна Точка с ложна. применение логических операторов ь и а й Ь истинно. а й с ложно. а ) Ь истинно. а ) с истинно. Применение укороченных логических операторов йй и )! а ьь Ь истинно. а ьь с ложно. а )( Ь истинно. а )) с истинно.

Рассмотрим более подробно, каким образом реализуются логические операторы й и ) . Они представлены в следующем фрагменте кода. // Перегрузить логический оператор ) для укороченного вычисления. рпЬ1гс ясаГ1с ТЬгееО орегасог )(ТЬгеео ор1, ТЬгеео ор2) ( ьг( ((ор1.х )= О) ) ) (ор1.у != О) ) ) (ор1.г != О) ) ((ор2.х != О) ) ) (ор2.у != О) () (ор2.г (= О) ) ) гесогп пен Тлгеео(1, 1, 1)7 е1яе гесогп пен Тлгеео(0, О, 0)г ) Перегрузить логический оператор й для укороченного вычисления. роь11с ягаг1с тьгеео орегагог ь(тьгеео ор1, тьгеео ор2) ( гГ( ((ор1.х != О) йь (ор1.у != О) йь (ор1.я != О]) ((ор2.х != О) ьь (ор2.у != О) ьь (ор2.г != О)) ) гегпгп печ ТЬгеео(1, 1, 1)г е1яе геспгп пеи ТЬгееО(0, О, О); 292 Часть ).

Язык С№ Прежде всего обратите внимание на то, что методы обоих перегружаемых логических операторов теперь возвращают объект типа ТЬгееР. И особенно обратите внимание на то, как формируется этот объект. Если логическая операция дает истинный результат, то создается и возвращается истинный объект типа ТпгееР, у которого хотя бы одна координата не равна нулю. Если же логическая операция дает ложный результат, то соответственно создается и возвращается ложный объект. Таким образом, результатом вычисления логического выражения а ь Ь в следующем фрагменте кода: зг(а а ь) сопяа1е.итьсеыпе("а я ь истинно."); е1яе Сопяо1е.итзвеътпе("а а Ъ ложно."); является объект типа ТпгееР, который в данном случае оказывается истинным. А поскольку операторы Ггсе и Та1яе уже определены, то созданный объект типа ТпгееР подвергается действию оператора Сгпе и в конечном итоге возвращается результат типа Ьоо1.

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

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

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

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

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