Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Точки and находятся на одном расстоянии от начала отсчета




На перегрузку операторов отношения накладывается следующее важное ограничение: они должны перегружаться попарно. Так, если перегружается оператор <, то следует перегрузить и оператор >, и наоборот. Ниже приведены составленные в пары перегружаемые операторы отношения.

 

==

 

I =

 

<

 

>

 

<=

 

>=

 

И еще одно замечание: если перегружаются операторы == и! =, то для этого обычно требуется также переопределить методы Object.EqualsO nObject. GetHashCode (). Эти методы и способы их переопределения подробнее рассматриваются в главе 11.

Перегрузка операторов 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 равна нулю, то этот объект истинен, а если все три его координаты равны нулю, то такой объект ложен. В данном примере программы реализован также оператор декремента исключительно в целях демонстрации.

// Перегрузить операторы true и false для класса ThreeD. using System;

// Класс для хранения трехмерных координат, class ThreeD {

int х, у, z; // трехмерные координаты

public ThreeD() { х = у = z = 0; }

public ThreeD(int i, int j, int k) { x = i; у = j; z = k; }

// Перегрузить оператор true.

public static bool operator true(ThreeD op) { if((op.x!= 0) M (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.у = op.y - 1; result.z = op.z - 1;

Return result;

}

// Вывести координаты X, Y, Z. •

Public void Show ()

{

Console.WriteLine(х + ", " + у + ", " + z);

}

}

class TrueFalseDemo { static void Main() {

ThreeD a = new ThreeD (5, 6, 7);

ThreeD b = new ThreeD(10, 10, 10);

ThreeD с = new ThreeD(0, 0, 0);

Console.Write("Координаты точки a: ");

A.Show();

Console.Write("Координаты точки b: ");

B.Show();

Console.Write("Координаты точки с: ");

C.Show();

Console.WriteLine();

if(a) Console.WriteLine("Точка а истинна."); else Console.WriteLine("Точка а ложна.");

if(b) Console.WriteLine("Точка b истинна."); else Console.WriteLine("Точка b ложна.");

if(с) Console.WriteLine("Точка с истинна."); else Console.WriteLine("Точка с ложна.");

Console.WriteLine();

Console.WriteLine("Управление циклом с помощью объекта класса ThreeD."); do {

B.Show(); b—;

} while(b);

}

}

Выполнение этой программы приводит к следующему результату.

Координаты точки а: 5, 6, 7 Координаты точки Ь: 10, 10, 10 Координаты точки с: 0, 0, 0

Точка а истинна Точка b истинна Точка с ложна

Управление циклом с помощью объекта класса ThreeD.

10, 10, 10

9, 9, 9 8, 8, 8 7, 1, 7 б, 6, б 5, 5, 5 4, 4, 4 3, 3, 3 2, 2, 2 1, 1, 1

Обратите внимание на то, как объекты класса ThreeD используются для управления условным оператором if и оператором цикла do-while. Так, в операторах if объект типа ThreeD проверяется с помощью оператора true. Если результат этой проверки оказывается истинным, то оператор i f выполняется. А в операторе цикла do-while объект b декрементируется на каждом шаге цикла. Следовательно, цикл повторяется до тех пор, пока проверка объекта b дает истинный результат, т.е. этот объект содержит хотя бы одну ненулевую координату. Если же окажется, что объект b содержит все нулевые координаты, его проверка с помощью оператора true даст ложный результат и цикл завершится.

Перегрузка логических операторов

Как вам должно быть уже известно, в C# предусмотрены следующие логические операторы: &, |,!, & & и | |. Из них перегрузке, безусловно, подлежат только операторы &, [ и!. Тем не менее, соблюдая определенные правила, можно извлечь также пользу из укороченных логических операторов & & и | |. Все эти возможности рассматриваются ниже.

Простой способ перегрузки логических операторов

Рассмотрим сначала простейший случай. Если не пользоваться укороченными логическими операторами, то перегрузку операторов & и | можно выполнять совершенно естественным путем, получая в каждом случае результат типа bool. Аналогичный результат, как правило, дает и перегружаемый оператор!.

Ниже приведен пример программы, в которой демонстрируется перегрузка логических операторов!, & и | для объектов типа ThreeD. Как и в предыдущем примере, объект типа ThreeD считается истинным, если хотя бы одна из его координат не равна нулю. Если же все три координаты объекта равны нулю, то он считается ложным.

// Простой способ перегрузки логических операторов //!, | и & для объектов класса ThreeD.

Using System;

// Класс для хранения трехмерных координат. class ThreeD {

int х, у, z; // трехмерные координаты

public ThreeD() { х = у = z = 0; }

public ThreeD(int i, int j, int k) { x = i; у = j; z = k; }

// Перегрузить логический оператор |.

public static bool operator |(ThreeD ‘opl, ThreeD op2)

{

if(((opl.x!= 0) M (opl.у!= 0) M (opl.z!= 0)) I ((op2 .-x!= 0) || (op2. у!= 0) || (op2.z!= 0)))

Return true; else

Return false;

}

// Перегрузить логический оператор &.

public static bool operator &(ThreeD opl, ThreeD op2)

{

if (((opl.x!= 0) && (opl.у!= 0) && (opl.z!= 0)) & ((op2.x!= 0) && (op2.y!= 0) && (op2.z!= 0)))

Return true; else

Return false;

}

11 Перегрузить логический оператор!. public static bool operator! (ThreeD op)

{

if ((op.x!= 0) M (op.у!= 0) || (op.z!= 0))





Поделиться с друзьями:


Дата добавления: 2016-12-03; Мы поможем в написании ваших работ!; просмотров: 371 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2565 - | 2225 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.