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


Полезное:

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

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