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

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 42

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

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

Если свободное место в массиве вгс)к есть, то элемеит сохраняется в ием глава 8, подробнее о методах и классах 207 по индексу, хранящемуся в переменной соз, после чего значение этой переменной инкрементируется. Таким образом, в переменной Коз всегда хранится индекс следующего свободного элемента массива зсск. Для извлечения элемента из стека вызывается открытый метод Рор (), приведенный ниже. // Извлечь символ из стека. рпЬ1гс спас Рор() ( 11(сов==с) ( Сопао1е.нггсепапе(" — Стек пуст."); геспгп (сьаг) О; ) гоа--; гегпгп вгсК[гов] ) В этом методе сначала проверяется значение переменной Коз.

Если оно равно нулю, значит, стек пуст. В противном случае значение переменной Коз декремснтируется, и затем из стека возвращается элемент по указанному индексу. Несмотря на то что для реализации стека достаточно методов Роз п () и Рор (), полезными могут оказаться и другие методы.

Поэтому в классе В гаек определены еще четыре метода: 1врп11 (), 1эЕщрсу (), Сарас1Су () и Цегицщ () . Эти методы предоставляют всю необходимую информацию о состоянии стека и приведены ниже. // Возвратить значение Ггпе, если стек заполнен. рпЫ1с Ьоо1 1агп11() ( геспгп сов==всех.ьепдсьх ) // Возвратить значение Ггпе, если стек пуст.

рпЫгс Ьоо1 1вЕщРГУ() ( геспгп Кое==с; ) // Возвратить общую емкость стека. рпЫгс гпг Сарасггу() ( геспгп ассК.ЬепЧГЬ/ // Возвратить количество объектов, находящихся в // данньм момент в стеке, рпЫгс гпк Сесине() ( гегпгп гоа; ) Метод 1зрп11 () возвращает логическое значение сгпе, если стек заполнен, а иначе — логическое значение га1зе. Метод 1зкщрту () возвращает логическое значение Ггце, если стек пуст, а иначе — логическое значение га1зе. Для получения общей емкости стека (т.е, общего числа элементов, которые могут в нем храниться) достаточно вызвать метод Сарасггу (), а для получения количества элементов, хранящихся в настоящий момент в стеке, — метод цеснпщ () . Польза от этих методов состоит в том, что для получения информации, которую они предоставляют, требуется доступ к закрытой переменной гоз.

Кроме того, они служат 208 Часть (. Язык С№ наглядными примерами организации безопасного доступа к закрытым членам класса с помощью открытых методов. Конкретное применение класса Ягаск для реализации стека демонстрируется в приведенной ниже программе. // Продемонстрировать применение класса Ясаск. цяапп Яуякеш) // Класс для хранения символов в стеке. с1аяя Якасх ( // Эти члены класса являются закрытыми. сваг() ягск( // массив, содержащий стек 1пс Гоя) // ИндЕкс вершины стека // Построить пустой класс Ясасх лля реализации // стека заданного размера. рцЫьс Ясаск(апс 51ЯЕ) яксх = пен сваг(яаяе]) // распределить память для стека Гоя = 0'; ) // Поместить символы в стек.

рцЫ№с чо1П Рияь(сваг сЫ ( 11(соя==ясса.ЬепдГП) ( Сопяо1е.Игькепьпе(" — Стек заполнен."); гегнгпк ) 5ссх(ГО5] = св; ГО5++) // Извлечь символ из стека. риЬ11с сваг Рор() ( 11 (ГО5==0) ( Сопяо1е.нг1сепвпе(" — Стек пуст.") гесцгп (сваг) 0; ) ГО5 гегцгп ягск(гоя] ) // Возвратить значение Ггце, если стек заполнен. риь11с ЬОО1 15гц11() ( геспгп соя==ясса.ьепчГЫ ) // Возвратить значение ггце, если стек пуст. рцЫ1с Ьоо1 15кшрку() ( Гвкцгп Гоя==Ок ) Глава 8. Подробнее о методах и классах 209 // Возвратить общую емкость стека. рцЬ11с гпс Сарасгсу() ( гесчгп зссК.ЬепОГЬ) ) // Возвратить количество объектов, находящихся в // данный момент в стеке.

риЬ1гс 1пс Песмпю() ( гегпгп поят ) ) с1аяз ЯсасКОещо ( зсас1с уогб Иаап() ( 5сасх зГК1 = пен 5сасК(10)т 5касК зГК2 = пен Ясасх(10)т ЯсасК зГКЗ = пен Ясасн(10)т спаг сЬт 1пг г; // Поместить ряд символов в стек зГК1. Сопзо1е.Иггсет дне("Поместить символы А-д в стек яГК1.")( йог (к=от (зСК1.1яуч11 () т 1ть) зГК1.Рпзп((спаг) ('А' + 1))т 1г(зГК1.1зуп11()) Сопяо1е.ыг1кеЕгпе("Стек зГК1 заполнен."); // Вывести содержимое стека зГК1. сопяо1е.иггге("содержимое стека згк1: ")) нЬг1е( !зГК1.1зЕщрсу() ) ( сп = зГК1.Рор()т Сопзо1е.мг1се(сЬ); ) Сопзо1е.мггсеЕгпе()т кд(яГК1.1зЕщрсу()) Сопзо1е.мг1се11пе("Стек зГК1 пуст.1п") // Поместить дополнительные символы в стек зГК1.

Сопзо1е.мг1сеЕгпе("Вновь поместить символы А-Ю в стек зГК1.") Гог(к=от !яГК1.1зуч11()т г+ь) зги1.РпзЬ((спаг) ('А' + г))( // А теперь извлечь элементы иэ стека згк1 и // поместить их в стек зГК2. // В итоге элементы сохраняются в стеке яГК2 // в обратном порядке. Сопзо1е.мг1ге11пе("А теперь извлечь символы иэ стека зГК11п" т "и поместить их в стек зГК2.")т нд11е( !зГК1.1зЕщрсу() ) ( сп = яГК1.Рор()'; зГК2.рсзп(сп)) 210 часть ). йзык Сз Сопзо1е.Иг1Се("Содержимое стека зС«2: ")) нн11е( !зС«2.1зкмрку() ) ( сп = зС«г.рор()т Сопзо1е.нгссе(сь) т ) Сопзо1е.нгскеъспе(ы«п")) // Поместить 5 символов в стек.

Сопзо1е.нг1«еъьпе("Поместить 5 символов в стек зС«З.")) тог(1=от 1 < 5; 1ъъ) зС«З.Розь((с«аг) ('А' + 1))т Сопзо1е.нгькеъ1пе("Емкость стека зС«З: " + зС«З.Сараську())т Сопзо1е.нгткепьпе("Количество объектов в стеке зС«З: " +зС«з.пекины())г При выполнении этой программы получается следующий результат: Поместить символы А-О в стек зС«1. Стек зС«1 заполнен. Содержимое стека зС«1т О1НОГЕОСВА Стек яС«1 пуст.

Вновь поместить символы А-О в стек зС«1. А теперь извлечь символы из стека зс«1 и поместить ик в стек зс«2. Содержимое стека зс«2: АВспегон1О Поместить 5 символов в стек зС«З. Емкость стека зС«зт 10 Количество объектов в стеке зС«З: 5 Передача обьектов методам по ссылке В приведенных до сих пор примерах программ при указании параметров, передаваемых методам, использовались типы значений, например 1пС или бопЬ1е. Но в методах можно также использовать параметры ссылочного типа, что не только правильно, но и весьма распространено в ООП.

Подобным образом объекты могут передаваться методам по ссылке. В качестве примера рассмотрим следующую программу: // Пример передачи объектов методам по ссылке. из1по Яузкев; с1азз МуС1азз ( тпС а1рпа, Ьеза; рпбтас МуС1азз(япС 1, Зпк З) а1рьа = ).; Ьеса = З) ) Глава В. Подробнее о методах и классах 211 // Возвратить значение стпе, если параметр оь // имеет те же значения, что и вызывающий объект. рпЫас Ьоо1 ЯащеАв(МуС1авв оЫ ( ак((оь.а1рла == а1рна) я (оь.Леса == бека)) хесигп слое) е1ве гекпхп Ка1ве) ) // Сделать копию объекта оЬ.

роЫЯс токо Сору(муС1авв оЬ) ( а1рпа = оЬ.а1рна( Ьека = оЬ.Ьека( ) рпЫЯс чохб 5Лон () ( Сопяо1е.нтаоет).пе("а1рпа: (О), Ьеоа: (1)", а1РЬа, пека)) ) с1авв РаввОЬ ( воасас чокб Мака() ( МуС1авв оЫ = пеи МуС1авв(4, 5)т МуС1аяв оЬ2 = пеи МуС1авв (б, 7) т Сопво1е.Итаке("оЬ1: ") т оЫ .ЯЛон()) Сопяо1е.

Ихкке ( "оЬ2 к ") ) оЬ2.5Лон()т 1К(оЫ .5ащеАв(оЬ2)) Сопво1е.мхкке11пе("оЫ и оЬ2 имеют одинаковые значений.") е1ве Сопво1е.нхакет апе ("оЫ и оЬ2 имеют разные значения . "); Сопво1е.нхкке51пе()( // А теперь сделать объект оЫ копией объекта оЬ2. оЫ .Сору(оба)) Сопво1е.Итаке("оЬ1 после копирований: ")т оЫ.ЯЛон() ) 15(оЬ1.Яащеав(оЬ2)) Сопяо1е.мтхоебепе("оЬ1 и оЬ2 имеют одинаковые значений.")( е1яе Сопво1е.мхкое51пе("оЫ и оЬ2 имеют разные значения."); 212 часть (. язык сз Выполнение этой программы дает следующий результат; оЫ: а1рьа: 4, Ьека: 5 оЬ2т я1рЬа: б, Ьеьа: 7 оЫ и оЬ2 имеют разные значения. оЫ после копирования: а1рна: б, Ьека: 7 оЫ и оЬ2 имеют одинаковые значения. Каждый из методов Заведя () и Сору () в приведенной выше программе получает ссылку на объект типа мус1аяя в качестве аргумента.

метод эаюедя () сравнивает значения переменных экземпляра а1рпа и Ьеда в вызывающем объекте со значениями аналогичных переменных в объекте, передаваемом посредством параметра оЬ. Данный метод возвращает логическое значение стае только в том случае, если оба объекта имеют одинаковые значения этих переменных экземпляра. А метод сору () присваивает значения переменных а1рЬа и Ьета из объекта, передаваемого по 'ссылке посредством параметра оЬ, переменным а1рпа и Ьеса из вызывающего объекта. Как показывает данный пример, с точки зрения синтаксиса объекты передаются методам по ссылке таким же образом, как и значения обычных типов. Способы передачи аргументов методу Как показывает приведенный выше пример, передача объекта методу по ссылке делается достаточно просто.

Но в этом примере показаны не все нюансы данного процесса. В некоторых случаях последствия передачи объекта по ссылке будут отличаться от тех результатов, к которым приводит передача значения обычного типа. Для выяснения причин этих отличий рассмотрим два способа передачи аргументов методу. Первым способом является выдоя ло значению. В этом случае значение аргумента копируется в формальный параметр метода. Следовательно, изменения, вносимые в т)араметр метода, не оказывают никакого влияния на аргумент, используемый для вызова.

А вторым способом передачи аргумента является вызов ло ссылке. В данном случае параметру метода передается ссылка на аргумент, а не значение аргумента. В методе эта ссылка используется для доступа к конкретному аргументу, указываемому при вызове. Это означает, что изменения, вносимые в параметр, будут оказывать влияние на аргумент, используемый для вызова метода.

По умолчанию в С() используется вызов по значению, а это означает, что копия аргумента создается и затем передается принимающему параметру. Следовательно, при передаче значения обычного типа, например 1дг или к(оиЫе, все, что происходит с параметром, принимающим аргумент, не оказывает никакого влияния за пределами метода. В качестве примера рассмотрим следующую программу. // Передача аргументов обычных типов по значению. изгое Яуякекы с1аяя теяк ( /* Этот метод не оказывает никакого влияния на аргументы, используемые для его вызова.

*/ роЫ1с то1б Нооьаоде(ьдк 1, ъок 1) ( 1 = 1 + 17 Глава 8. Г)одробнее о методах н классах 213 3 = 3 ) с1аяя Са11вуча1пе яоаогс чохк( Маъп() ( теяс оь = пеи теяс В т Тпк а = 15, Ь = 20т Сопяо1е.ыгхкеъгпе("а и Ь ло вызова: а т" 5 Ь Ыт оо.иоспапде(а, Ы т Сопяо1е.ыгъоегьпе("а и Ь после вызова: а + " е ь Ь)т Вот какой результат дает выполнение этой программы: а и Ь ло вызова: 15 20 а и Ь после вызова: 15 20 Как видите, операции, выполняемые в методе ИоСЬаптте (), ие оказывают никакого влияиия иа значения аргументов а и Ь, используемых для вызова данного метода. Это опять же объясняется тем, что параметрам 1 и 1 переданы копии значений аргументов а и Ь, а сами аргументы а и Ь совершенно ие зависят от параметров 1 и 21 В частности, присваиваиие параметру х нового значения ие будет оказывать никакого влияния иа аргумент а.

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

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

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

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

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее