Герберт Шилдт - C# 4.0 полное руководство - 2011

Тут можно читать онлайн Герберт Шилдт - C# 4.0 полное руководство - 2011 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Герберт Шилдт - C# 4.0 полное руководство - 2011 краткое содержание

C# 4.0 полное руководство - 2011 - описание и краткое содержание, автор Герберт Шилдт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

C# 4.0 полное руководство - 2011 - читать онлайн бесплатно полную версию (весь текст целиком)

C# 4.0 полное руководство - 2011 - читать книгу онлайн бесплатно, автор Герберт Шилдт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

А теперь проанализируем операторный метод operator- (). Оператор - действует так же, как и оператор +, но для него важен порядок следования операндов. Напомним, что сложение носит коммутативный характер (от перестановки слагаемых сумма не меняется), чего нельзя сказать о вычитании: А - В не то же самое, что и В - А! Для всех двоичных операторов первым параметром операторного метода является левый операнд, а вторым параметром — правый операнд. Поэтому, реализуя перегружаемые варианты некоммутативных операторов, следует помнить, какой именно операнд должен быть указан слева и какой — справа.

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

Унарные операторы перегружаются таким же образом, как и бинарные. Главное отличие заключается, конечно, в том, что у них имеется лишь один операнд. В качестве примера ниже приведен метод, перегружающий оператор унарного минуса для класса ThreeD.

// Перегрузить оператор унарного минуса, public static ThreeD operator -(ThreeD op)

{

ThreeD result = new ThreeD();

result.x = -op.x;

result.у = -op.у;

result.z = -op.z;

return result; 1

}

В данном примере создается новый объект, в полях которого сохраняются отрицательные значения операнда перегружаемого унарного оператора, после чего этот объект возвращается операторным методом. Обратите внимание на то, что сам операнд не меняется. Это означает, что и в данном случае обычное назначение оператора унарного минуса сохраняется. Например, результатом выражения

а = -Ь

является отрицательное значение операнда Ь, но сам операнд b не меняется.

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

// Перегрузить унарный оператор ++. public static ThreeD operator ++(ThreeD op)

{

ThreeD result = new ThreeD();

return result;

}

Ниже приведен расширенный вариант предыдущего примера программы, в кото ром демонстрируется перегрузка унарных операторов - и ++.

// Пример перегрузки бинарных и унарных операторов, 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 ThreeD operator +(ThreeD opl, ThreeD op2)

{

ThreeD result = new ThreeD();

/* Сложить координаты двух точек и возвратить результат. */

result.х = opl.x + ор2.х;

result.у = opl.у + ор2.у;

result.z = opl.z + op2.z;

return result;

}

// Перегрузить бинарный оператор -.

public static ThreeD operator -(ThreeD opl, ThreeD op2)

{

ThreeD result = new ThreeD();

/* Обратить внимание на порядок следования операндов: opl — левый операнд, ор2 — правый операнд. */ result.х = opl.x - ор2.х; result.у = opl.у - ор2.у; result.z = opl.z - op2.z;

return result;

}

// Перегрузить унарный оператор -. public static ThreeD operator -(ThreeD op)

{

ThreeD result = new ThreeD();

result.x = -op.x; result, у-= -op.y; result.z = -op.z;

return result;

}

// Перегрузить унарный оператор ++. 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(x + ", " + у + ", " + z);

}

}

class ThreeDDemo { static void Main() {

ThreeD a = new ThreeD(1, 2, 3);

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

ThreeD с = new ThreeD();

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

a.Show();

Console.WriteLine();

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

b.Show () ;

Console.WriteLine();

c=a+b; // сложить координаты точек а и b

Console.Write("Результат сложения a + b: ");

c.Show();

Console.WriteLine();

c=a+b+c; // сложить координаты точек a, b и с Console.Write("Результат сложения a + b + с: ");

с.Show();

Console.WriteLine();

с = с - а; // вычесть координаты точки а Console.Write("Результат вычитания с - а: ") ; с.Show();

Console.WriteLine();

с = с - b; // вычесть координаты точки b Console.Write("Результат вычитания с - Ь: ") ; с.Show();

Console.WriteLine();

с = -а; // присвоить точке с отрицательные координаты точки Console.Write("Результат присваивания -а: "); с.Show();

Console.WriteLine();

с = а++; // присвоить точке с координаты точки а,

// а затем инкрементировать их Console.WriteLine("Если с = а++");

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

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

а.Show();

// Установить исходные координаты (1,2,3) точки а а = new ThreeD(1, 2, 3);

Console.Write("ХпУстановка исходных координат точки а: ");

а.Show();

с = ++а; // инкрементировать координаты точки а,

// а затем присвоить их точке с Console.WriteLine("\пЕсли с = ++а");

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

Console.Write("а координаты точки а равны "); а . Show ( ) ;

}

}

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

Координаты точки а: 1, 2, 3

Координаты точки Ь: 10, 10, 10

Результат сложения а + Ь: 11, 12, 13

Результат сложения а+Ь+с: 22, 24, 26

Результат вычитания с - а: 21, 22, 23

Результат вычитания с -Ь: 11, 12, 13

Результат присваивания -а: -1, -2, -3 Если с = а++

то координаты точки с равны 1, 2, 3

а координаты точки а равны 2, 3, 4 Установка исходных координат точки а: 1, 2, 3 Если с = ++а _

то координаты точки с равны 2, 3, 4 а координаты точки а равны 2, 3, 4

Выполнение операций со встроенными в C# типами данных

Для любого заданного класса и оператора имеется также возможность перегрузить сам операторный метод. Это, в частности, требуется для того, чтобы разрешить операции с типом класса и другими типами данных, в том числе и встроенными. Вновь обратимся к классу ThreeD. На примере этого класса ранее было показано, как оператор + перегружается для сложения координат одного объекта типа ThreeD с координатами другого. Но это далеко не единственный способ определения операции сложения для класса ThreeD. Так, было бы не менее полезно прибавить целое значение к каждой 'координате объекта типа ThreeD. Подобная операция пригодилась бы для переноса осей координат. Но для ее выполнения придется перегрузить оператор + еще раз, как показано ниже.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Герберт Шилдт читать все книги автора по порядку

Герберт Шилдт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C# 4.0 полное руководство - 2011 отзывы


Отзывы читателей о книге C# 4.0 полное руководство - 2011, автор: Герберт Шилдт. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x