Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Перегрузка операторов true и false
Ключевые слова true и false можно также использовать в качестве унарных операторов для целей перегрузки. Перегружаемые варианты этих операторов позволяют определить назначение ключевых слов true и false специально для создаваемых классов. После перегрузки этих ключевых слов в качестве унарных операторов для конкретного класса появляется возможность использовать объекты этого класса для управления операторами if, while, for и do-while или же в условном выражении?. Операторы true и false должны перегружаться попарно, а не раздельно. Ниже приведена общая форма перегрузки этих унарных операторов. public static bool operator true{тип_параметра операнд) { // Возврат логического значения true или false. }
public static bool operator false(тип_параметра операнд) { // Возврат логического значения true или false. } Обратите внимание на то, что и в том и в другом случае возвращается результат типа bool. Ниже приведен пример программы, демонстрирующий реализацию операторов true и false в классе ThreeD. В каждом из этих операторов проверяется следующее условие: если хотя бы одна из координат объекта типа ThreeD равна нулю, то этот объект истинен, а если все три его координаты равны нулю, то такой объект ложен. В данном примере программы реализован также оператор декремента исключительно в целях демонстрации. Листинг 9.9 // Перегрузить операторы true и false для класса ThreeD.
using System;
// Класс для хранения трехмерных координат. class ThreeD { int x, y, z; // трехмерные координаты
public ThreeD() { x = y = z = 0; } public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }
// Перегрузить оператор true. public static bool operator true(ThreeD op) { if((op.x!= 0) || (op.y!= 0) || (op.z!= 0)) return true; // хотя бы одна координата не равна нулю else return false; }
// Перегрузить оператор false. public static bool operator false(ThreeD op) { if((op.x == 0) && (op.y == 0) && (op.z == 0)) return true; // все координаты равны нулю else return false; }
// Перегрузить унарный оператор --. public static ThreeD operator --(ThreeD op) { ThreeD result = new ThreeD();
// Возвратить результат декрементирования. result.x = op.x - 1; result.y = op.y - 1; result.z = op.z - 1;
return result; }
// Вывести координаты X, Y, Z. public void Show() { Console.WriteLine(x + ", " + y + ", " + z); } }
class TrueFalseDemo { static void Main() { ThreeD a = new ThreeD(5, 6, 7); ThreeD b = new ThreeD(10, 10, 10); ThreeD c = new ThreeD(0, 0, 0);
Console.Write("Координаты точки a: "); a.Show();
Console.Write("Координаты точки b: "); b.Show(); Console.Write("Координаты точки c: "); c.Show(); Console.WriteLine();
if(a) Console.WriteLine("Точка a истинна."); else Console.WriteLine("Точка a ложна.");
if(b) Console.WriteLine("Точка b истинна."); else Console.WriteLine("Точка b ложна.");
if(c) Console.WriteLine("Точка c истинна."); else Console.WriteLine("Точка c ложна.");
Console.WriteLine();
Console.WriteLine("Управление циклом с помощью объекта " + "класса ThreeD."); do { b.Show(); b--; } while(b); } } Выполнение этой программы приводит к следующему результату. Координаты точки а: 5, 6, 7 Координаты точки b: 10, 10, 10 Координаты точки с: 0, 0, 0
Точка а истинна Точка b истинна Точка с ложна
Управление циклом с помощью объекта класса ThreeD. 10, 10, 10 9, 9, 9 8, 8, 8 7, 7, 7 6, 6, 6 5, 5, 5 4, 4, 4 3, 3, 3 2, 2, 2 1, 1, 1 Обратите внимание на то, как объекты класса ThreeD используются для управления условным оператором if и оператором цикла do-while. Так, в операторах if объект типа ThreeD проверяется с помощью оператора true. Если результат этой проверки оказывается истинным, то оператор if выполняется. А в операторе цикла do-while объект b декрементируется на каждом шаге цикла. Следовательно, цикл повторяется до тех пор, пока проверка объекта b дает истинный результат, т.е. этот объект содержит хотя бы одну ненулевую координату. Если же окажется, что объект b содержит все нулевые координаты, его проверка с помощью оператора true даст ложный результат и цикл завершится.
|
|||||
Последнее изменение этой страницы: 2016-12-30; просмотров: 179; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.199.162 (0.006 с.) |