Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |