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


Полезное:

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



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