Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Перегрузка операций приведения типа

Читайте также:
  1. Автоматизация учета финансово-расчетных операций и сводного учета
  2. Автоматизированная обработка учета складских операций и реализации продукции
  3. Аудит кассовых операций
  4. АУДИТ КАССОВЫХ ОПЕРАЦИЙ.
  5. Аудит операций на расчетном, валютном и других счетах в банках.
  6. Аудит операций приходно-расходной кассы
  7. Аудит расчетных операций с поставщиками, покупателями, дебиторами и кредиторами, подотчетными лицами

ПЕРЕГРУЗКА ОПЕРАТОРОВ

Язык С# позволяет выполнять перегрузку операторов с целью их использования в собственных классах. Перегрузка операторов может сделать использование некоторых классов более естественным. Она должна быть выполнена только тогда, когда смысл оператора интуитивно ясен для типа (например, для поддержки сложения двух экземпляров типа, который представляет числовое значение). Перегрузка оператора не должна использоваться для представления синтаксически укороченных интуитивно неясных операторов.

Все перегруженные операторы являются статическими методами класса и имеют тип доступа public. В зависимости от типа перегружаемого оператора, такие методы могут принимать один или два параметра, и всегда возвращают значение. Для всех операторов типом одного из параметров должен быть тип включающего метод класса. Существует две группы перегруженных операторов: унарные и бинарные. Можно переопределять следующие унарные операторы: +, -,!, ++, --, true, false.

Синтаксис перегрузки оператора:

тип operator унарный_оператор (параметр)

Пример:

class Complex

{

double real;

double im;

public Complex(double r, double i) {

real = r; im = i;

}

static public Complex operator ++(Complex cm1)

{

return new Complex(cm1.real++, cm1.im++);

}

}

 

Бинарные операции принимают два параметра. К ним относятся арифметические операции и операции отношений (сравнения).

Синтаксис перегрузки оператора:

тип operator унарный_оператор (параметр1, параметр 2)

Пример перегрузки операции сложения для класса комплексных чисел:

class Complex {

double real;

double im;

public Complex(double r, double i) {

real = r; im = i;

}

static public Complex operator +(Complex cm1, Complex cm2)

{

return new Complex(cm1.real + cm2.real, cm1.im + cm2.im);

}

static public Complex operator +(double cm1, Complex cm2)

{

return new Complex(cm1 + cm2.real, cm2.im);

}

static public Complex operator +(Complex cm1, double cm2)

{

return new Complex(cm1.real + cm2, cm1.im);

}

}

class Program {

static void Main(string[] args) {

Complex complex1 = new Complex(2, 1);

Complex complex2 = new Complex(3, 2);

Complex complex3 = complex1 + complex2;

Complex complex4 = complex1 + 5;

Console.ReadKey();

}

}

 

ПЕРЕГРУЗКА ОПЕРАЦИЙ ПРИВЕДЕНИЯ ТИПА

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

Операции приведения типа могут иметь либо операнд, либо возвращаемое значение того типа, что и класс, в которой они объявлены. Так например, для класса комплексных чисел неявное приведение из double в Complex, а явное приведение – из Complex в double.

class Complex {

//неявное приведение

static public implicit operator Complex(double d) {

return new Complex(d, 0);

}

//явное приведение

static public explicit operator double(Complex cm) {

return Math.Sqrt(Math.Pow(cm.real,2)+Math.Pow(cm.im,2));

}

}

static void Main(string[] args) {

Complex complex1 = new Complex(2, 1);

Complex complex5 = 3.2; //неявное приведение

double x = (double)complex1; //явное приведение

Console.ReadKey();

}

В приведенном фрагменте ключевое слово explicit служит для объявления оператора преобразования пользовательского типа, который следует вызывать во время приведения. В свою очередь ключевое слово implicit служит для объявления неявного оператора преобразования пользовательского типа. Этот оператор обеспечивает неявное преобразование между пользовательским типом и другим типом, если при преобразовании исключается утрата данных.


Дата добавления: 2015-11-26; просмотров: 76 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.009 сек.)