русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Операции преобразования типов


Дата добавления: 2013-12-23; просмотров: 1479; Нарушение авторских прав


Бинарные операции

При разработке класса можно перегрузить следующие бинарные операции: + - * / % & | ^ << >> == != < > <= >=. Обратите внимание, операций присваивания в этом списке нет.

Синтаксис объявителя бинарной операции:

тип operator бинарная_операция (параметр1, параметр 2)

Примеры заголовков бинарных операций:

public static DemoArray operator + (DemoArray a, DemoArray b)public static bool operator == (DemoArray a, DemoArray b)

При переопределении бинарных операций нужно учитывать следующие правила:

  1. Хотя бы один параметр, передаваемый в операцию, должен иметь тип класса, для которого она определяется.
  2. Операция может возвращать величину любого типа.
  3. Операции отношений определяются только парами и обычно возвращают логическое значение. Чаще всего переопределяются операции сравнения на равенство и неравенство для того, чтобы обеспечить сравнение значения некоторых полей объектов, а не ссылок на объект. Для того чтобы переопределить операции отношений, требуется знание стандартных интерфейсов, которые будут рассматриваться чуть позже.

В качестве примера вернемся к классу DemoArray, реализующему одномерный массив, и добавим в него две версии переопределенной операции +:

  • Вариант 1: добавляет к каждому элементу массива заданное число;
  • Вариант 2: поэлементно складывает два массива
class DemoArray { … public static DemoArray operator +(DemoArray x, int a) //вариант 1 { DemoArray temp = new DemoArray(x.LengthArray); for (int i = 0; i < x.LengthArray; ++i) temp[i]=x[i]+a; return temp; } public static DemoArray operator +(DemoArray x, DemoArray y) //вариант 2 { if (x.LengthArray == y.LengthArray) { DemoArray temp = new DemoArray(x.LengthArray); for (int i = 0; i < x.LengthArray; ++i) temp[i] = x[i] + y[i]; return temp; } else throw new Exception("несоответствие размерностей"); } } class Program { static void Main() { try { DemoArray a = new DemoArray(1, -4, 3, -5, 0); a.Print("Массива a"); DemoArray b=a+10; b.Print("\nМассива b"); DemoArray c = a+b; c.Print("\nМассива c"); } catch (Exception e) { Console.WriteLine(e.Message); } } }

Задание. Добавьте в класс DemoArray переопределение бинарного минуса (из всех элементов массива вычитается заданное число) и операции & (поэлементно сравнивает два массива, если соответствующие элементы попарно совпадают, то операция возвращает значение true, иначе false).



Операции преобразования типов обеспечивают возможность явного и неявного преобразования между пользовательскими типами данных. Синтаксис объявителя операции преобразования типов выглядит следующим образом:

explicit operator целевой_тип (параметр) //явное преобразованиеimplicit operator целевой_тип (параметр) //неявное преобразование

Эти операции выполняют преобразование из типа параметра в тип, указанный в заголовке операции. Одним из этих типов должен быть класс, для которого выполняется преобразование.

Неявное преобразование выполняется автоматически в следующих ситуациях:

  1. при присваивании объекта переменной целевого типа;
  2. при использовании объекта в выражении, содержащем переменные целевого типа;
  3. при передаче объекта в метод параметра целевого типа;
  4. при явном приведении типа.

Явное преобразование выполняется при использовании операции приведения типа.

При определении операции преобразования типа следует учитывать следующие особенности:

  1. тип возвращаемого значения (целевой_тип) включается в сигнатуру объявителя операции;
  2. ключевые слова explicit и implicit не включаются в сигнатуру объявителя операции.

Следовательно, для одного и того класса нельзя определить одновременно и явную, и неявную версию. Однако, т.к. неявное преобразование автоматически выполнятся при явном использовании операции приведения типа, то достаточно разработать только неявную версию операции преобразования типа.

В качестве примера вернемся к классу DemoArray, реализующему одномерный массив, и добавим в него неявную версию переопределения типа DemoArray в тип одномерный массив и наоборот:

class DemoArray { … public static implicit operator DemoArray (int []a) //неявное преобразование типа int [] в DemoArray { return new DemoArray(a); } public static implicit operator int [](DemoArray a) //неявное преобразование типа DemoArray в int [] { int []temp=new int[a.LengthArray]; for (int i = 0; i < a.LengthArray; ++i) temp[i] = a[i]; return temp; } } class Program { static void arrayPrint(string name, int[]a) //метод, который позволяет вывести на экран одномерный массив { Console.WriteLine(name + ": "); for (int i = 0; i < a.Length; i++) Console.Write(a[i] + " "); Console.WriteLine(); } static void Main() { try { DemoArray a = new DemoArray(1, -4, 3, -5, 0); int []mas1=a; //неявное преобразование типа DemoArray в int [] int []mas2=(int []) a; //явное преобразование типа DemoArray в int [] DemoArray b1 =mas1; //неявное преобразование типа int [] в DemoArray DemoArray b2 =(DemoArray)mas2; //явное преобразование типа int [] в DemoArray //изменение значений mas1[0]=0; mas2[0]=-1; b1[0]=100; b2[0]=-100; //вывод на экран a.Print("Массива a"); arrayPrint("Maccив mas1", mas1); arrayPrint("Maccив mas2", mas2); b1.Print("Массива b1"); b2.Print("Массива b2"); } catch (Exception e) { Console.WriteLine(e.Message); } } }

Задание. В методе Main используется операция приведения типа DemoArray к int[] (и наоборот) в явном виде, хотя явная версия операции преобразования типа DemoArray к int[] не была определена. Объясните, почему возможно использование явного приведения типа.

Самостоятельная работа

Используя дополнительную литературу и Интернет, рассмотрите следующие темы:

  1. Сборки: понятие сборки, создание и использование.
  2. Создание и использование библиотек.

Лекция 14. Нследование классов, иерархия классов

14.1 Иерархия и наследование

Управлять большим количеством разрозненных классов довольно сложно. С этой проблемой можно справиться путем упорядочивания и ранжирования классов, то есть объединяя общие для нескольких классов свойства в одном классе и используя его в качестве базового. Эту возможность предоставляет механизм наследования.

Наследование применяется для следующих взаимосвязанных целей:

  1. исключения из программы повторяющихся фрагментов кода;
  2. упрощения модификации программы;
  3. упрощения создания новых программ на основе существующих.

Наследование является единственной возможностью использовать объекты, исходный код которых недоступен, но в которые требуется внести изменения.

Кроме механизма наследования в данном разделе мы рассмотрим такие важные понятия ООП как полиморфизм и инкапсуляцию , которые также принимают участие в формировании иерархии классов.



<== предыдущая лекция | следующая лекция ==>
Унарные операции | Использование защищенного доступа


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.