Главная Случайная страница


Полезное:

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


Категории:

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






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





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

// Перегрузить оператор унарного минуса.

public static ThreeD operator - (ThreeD op)

{

ThreeD result = new ThreeD ();

result.x = -op.x;

result.у = -op.у;

result.z = -op.z;

return result;

}

Обратите внимание на то, что сам операнд не меняется. Это означает, что и в данном случае обычное назначение оператора унарного минуса сохраняется. Например, результатом выражения

а = -b

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

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

 

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

public static ThreeD operator ++(ThreeD op)

{

ThreeD result = new ThreeD();

// Возвратить результат инкрементирования.

result.x = op.x + 1;

result.у = op.у + 1;

result.z = op.z + 1;

return result;

}

___________________________________________________________________________________________________

//пример перегрузки бинарных и унарных операторов

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; }

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

public static ThreeD operator +(ThreeD op1, ThreeD op2)

{

ThreeD result = new ThreeD();

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

result.x = op1.x + op2.x;

result.y = op1.y + op2.y;

result.z = op1.z + op2.z;

return result;

}

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

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

{

ThreeD result = new ThreeD();

//обратить внимание на порядок следования операндов:

//op1 - левый операнд, op2 - правый операнд.

result.x = op1.x - op2.x;

result.y = op1.y - op2.y;

result.z = op1.z - op2.z;

return result;

}

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

public static ThreeD operator -(ThreeD op)

{

ThreeD result = new ThreeD();

result.x = -op.x;

result.y = -op.y;

result.z = -op.z;

return result;

}

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

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 ThreeDDemo

{

static void Main()

{

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

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

ThreeD c = new ThreeD();

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

a.Show();

Console.WriteLine();

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

b.Show();

Console.WriteLine();

c = a + b;

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

c.Show();

Console.WriteLine();

c = a + b + c;

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

c.Show();

Console.WriteLine();

c = c - a;

Console.Write("Результат вычитания c - a: ");

c.Show();

Console.WriteLine();

c = c - b;

Console.Write("Результат вычитания c - b: ");

c.Show();

Console.WriteLine();

c = -a;

Console.Write("Результат присваивания -а: ");

c.Show();

Console.WriteLine();

c = a++;

Console.WriteLine("Если c = a++");

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

c.Show();

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

a.Show();

//установить исходные координаты (1,2,3) точки а

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

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

a.Show();

c = ++a;

Console.WriteLine("\nЕсли с = ++a");

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

c.Show();

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

a.Show();

}

}

 







Date: 2015-09-02; view: 425; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию