Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 116

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 110 111 112 113 114 115 < 116 > 117 118 119 120 121 122 .. 404 >> Следующая


foundCard я Bandam'sourceGei; 4 new Randan 0 ; while (foundCard -« false)

>

cards 9 newDeck;
Дополнительные сведения о классах

243

Обратите внимание, что при копировании исходных файлов из chiocardLib в cbiicardLib необходимо изменить объявления пространства имен таким образом, чтобы они ссылались на CMiCardLib; именно поэтому строка с объявлением пространства имен в коде также выделена. Это справедливо как для файла card.es, так и для консольного приложения

Cbl OCardCl lend.

В данном случае потребовалось внести не так уж много изменений. Большая их часть касается изменения логики процедуры тасования колоды. Теперь карты выбираются по случайному индексу и добавляются в начало нового семейства элементов Cards с именем newDeck, а раньше они выбирались по последовательным индексам из cards н добавлялись в newDeck по индексу, определяемому случайным образом.

Клиентское консольное приложение ChlQCarddienc для решения chiocardLib может работать с новой библиотекой; при этом результаты окажутся точно такими же, поскольку сигнатуры методов в Deck остались неизменными. Клиенты этой библиотеки классов теперь могут использовать класс семейства Cards, вместо того чтобы работать с массивами объектов типа Card, например, при определении розданных игрокам карт в приложении для карточных игр.

Перегрузка операторов

Следующим предметом рассмотрения будет перегрузка операторов. Она позволяет применять стандартные операторы — такие как +, > и т. п.— в операциях над созданными нами классами. Это называется перегрузкой, поскольку мы используем нашу собственную реализацию работы этих операторов в тех случаях, когда они применяются для выполнения операций над параметрами определенных типов; во многом это аналогично тому, как перегружаются методы, когда передаются различные параметры методам с одним и тем же именем.

Перегрузка операторов оказывается весьма полезной, поскольку позволяет выполнять любые действия, которые мы определим при реализации перегрузки оператора. Они могут быть вовсе не так просты, как, скажем, “+ означает сложение двух данных операндов”. Немного позже, при дальнейшем усовершенствовании библиотеки CardLib, нам встретится хороший пример такого подхода. Мы включим в нее такие реализации операторов сравнения, которые позволят сравнивать две карты, чтобы определить, какая из них бьет другую и берет взятку (этап карточной игры). Поскольку взятка во многих карточных играх зависит от мастей участвующих в ней карт, то эта задача оказывается не такой примитивной, чтобы просто сравнивать старшинство карт. Если вторая сыгранная карта отличается по мастн от первой, то первая карта забирает взятку независимо от старшинства. Такая логика может быть реализована, если учитывать порядок следования двух операндов. Мы можем также ввести понятие козырной масти: козыри бьют все остальные мастн даже в том случае, если это не первая сыгранная карта. Это означает, что если результат cardi > card2 равен true (т, е. cardi бьет card2, если cardi сыграна первой), из него совершенно не следует, что значение card2 > cardi есть false. Если ни cardi, ни card2 не являются козырями и мастн их различны, то оба этн сравнения дддуг значение true.

Однако для начала давайте познакомимся с основным синтаксисом перегрузки операторов.
244 Глава 11

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

В качестве примера давайте рассмотрим простой класс с именем AddClassl, определенный следующим образом:

public class AddClassl (

public int val;

>

На самом деле это просто оболочка для значения типа int, однако она вполне может служить для иллюстрации общих принципов.

Для данного класса код следующего вида не сможет пройти компиляцию,

AddClassl opl ¦ new AddClassl[); opl.val ¦ 5j

AddClassl 0p2 = new AddClasslО; op2.val = 5)

AddClassl op3 = Dpi + op2;

В полученном сообщении об ошибке будет содержаться информация о том, что оператор + не может использоваться с операндами типа Addciaaei, поскольку мы не определили выполняемую операцию.

Следующий код будет работать, хотя он может приводить к получению совсем не того результата, который вы ожидаете:

AddClassl opl = new AddClassl(); opl.val = 5;

AddClassl op2 = new AddClassl();

op2,val - 5i

bool Op3 = opl ” op21

В данном случае opl и орг сравниваются с помощью бинарного оператора = =, который позволяет определить, ссылаются лн они на один и тот же объект, а вовсе не то, обладают ли они одинаковыми значениями, орэ будет присвоено в этом примере значение false, несмотря на то, что opl.val и op2.vai имеют идентичные значения.
Предыдущая << 1 .. 110 111 112 113 114 115 < 116 > 117 118 119 120 121 122 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.