Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Еще один пример перегрузки операторов
В данном примере разрабатывается 4-разрядный целочисленный тип данных и для него определяется ряд операций. Вам, вероятно, известно, что на ранней стадии развития вычислительной техники широко применялся тип данных для обозначения 4-разрядных двоичных величин, называвшихся полубайтами, поскольку они составляли половину байта, содержали одну шестнадцатеричную цифру и были удобны для ввода кода полубайтами с пульта ЭВМ, что в те времена считалось привычным занятием для программистов! В наше время этот тип данных применяется редко, но он по-прежнему является любопытным дополнением целочисленных типов данных в С#. По традиции полубайт обозначает целое значение без знака. В приведенном ниже примере программы тип полубайтовых данных реализуется с помощью класса Nybble. В качестве базового для него используется тип int, но с ограничением на хранение данных от 0 до 15. В классе Nybble определяются следующие операторы. • Сложение двух объектов типа Nybble. • Сложение значения типа intс объектом типа Nybble. • Сложение объекта типа Nybble со значением типа int. • Операции сравнения: больше (>) и меньше (<). • Операция инкремента. • Преобразование значения типа int в объект типа Nybble. • Преобразование объекта типа Nybble в значение типа int.
//создать полубайтовый тип 4-разрядных данных под названием Nybble. using System; //тип 4-разрядных данных. class Nybble { int val; //базовый тип для хранения данных public Nybble() { val = 0; } public Nybble(int i) { val = i; val = val & 0xF;//сохранить 4 младших разряда } //перегрузить бинарный оператор + для сложения двух обьектов типа Nybble public static Nybble operator +(Nybble op1, Nybble op2) { Nybble result = new Nybble(); result.val = op1.val + op2.val; result.val = result.val & 0xF; // сохранить 4 младших разряда return result; } //перегрузить бинарный оператор + для сложения значения типа Nybble. и обьекта типа int public static Nybble operator +(Nybble op1, int op2) { Nybble result = new Nybble(); result.val = op1.val + op2; result.val = result.val & 0xF;//сохранить 4 младших разряда return result; } //перегрузить бинарный оператор + для сложения значения типа int и обьекта типа Nybble. public static Nybble operator +(int op1, Nybble op2) { Nybble result = new Nybble(); result.val = op1 + op2.val; result.val = result.val & 0xF; //сохранить 4 младших разряда return result; }
//перегрузить оператор ++. public static Nybble operator ++(Nybble op) { Nybble result = new Nybble(); result.val = op.val + 1; result.val = result.val & 0xF; //сохранить 4 младших разряда return result; } //перегрузить оператор >. public static bool operator >(Nybble op1, Nybble op2) { if (op1.val > op2.val) return true; else return false; } //перегрузить оператор <. public static bool operator <(Nybble op1, Nybble op2) { if (op1.val < op2.val) return true; else return false; } //преобразовать тип Nybble в тип int public static implicit operator int(Nybble op) { return op.val; } //преобразовать тип int в тип Nybble. public static implicit operator Nybble(int op) { return new Nybble(op); } } class NybblseDemo { static void Main() { Nybble a = new Nybble(1); Nybble b = new Nybble(10); Nybble c = new Nybble(); int t; Console.WriteLine("a: " + (int)a); Console.WriteLine("b: " + (int)b); //использовать тип Nybble в условном операторе if. if (a < b) Console.WriteLine("a меньше b\n"); //сложить два обьекта типа Nybblt/ c = a + b; Console.WriteLine("с после операции с = a + b: " + (int)c); //сложить значение типа int c обьектом типа Nybble. a += 5; Console.WriteLine("а после операции a += 5: " + (int)a); Console.WriteLine(); //использовать тип Nybble в выражении типа int. t = a * 2 + 3; Console.WriteLine("Результат вычисления выражения a * 2 + 3: " + t); Console.WriteLine(); //продемонстрировать присваивание значения типа int и переполнение. a = 19; Console.WriteLine("Результат присваивания a = 19: " + (int)a); Console.WriteLine(); //использовать тип Nybble для управления циклом. Console.WriteLine("Управление циклом for c помощью обьекта типа Nybble."); for (a = 0; a < 10; a++) Console.Write((int)a + " "); Console.WriteLine(); } } ГЛАВА Date: 2015-09-02; view: 453; Нарушение авторских прав |