русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Бінарні операції


Дата додавання: 2015-01-08; переглядів: 1306.


 

Можна визначати в класі наступні бінарні операції:

 

+ - * / % & | ^ << >> == != > < >= <=

 

Синтаксис об'явника бінарної операції:

 

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

 

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

 

Cjblic static MyObject operator + (MyObject m1, MyObject m2 )

Cublic static bool operator = = (MyObject m1, MyObject m2 )

 

Хоч би один параметр, переданий в операцію, повинен мати тип класу, для якого вона визначається. Операція може повертати величину будь-якого типу.

Операції == і ! =, > і <, >= і <= визначаються тільки парами і зазвичай повертають логічне значення. Найчастіше в класі визначають операції порівняння на рівність і нерівність для того, щоб забезпечити порівняння об'єктів, а не їх посилань, як визначено за умовчанням для посилальних типів. Перевантаження операцій відношення вимагає знання інтерфейсів, тому вона розглядається пізніше.

Приклад визначення операції складання для класу Safearray, описаного в попередньому розділі, приведений в лістингу 7.6. Залежно від операндів операція або виконує поелементне складання двох масивів, або додає значення операнда до кожного елементу масиву.

 

Лістинг 7.6. Визначення операції складання для класу SafeArray

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace examp47

{

class SafeArray

{

public SafeArray( int size )

{

a = new int[size] ;

length = size;

}

 

public SafeArray( params int[ ] arr )

{

length = arr.Length;

a = new int[length] ;

for ( int i = 0; i < length; ++i ) a[i] = arr[i];

}

 

public static SafeArray operator + ( SafeArray x, SafeArray y ) // +

{

int len = x.length < y.length ? x.length : y.length;

SafeArray temp = new SafeArray (len) ;

for ( int i = 0; i < len; ++i ) temp[i] = x[i] + y[i];

return temp;

}

 

public static SafeArray operator + ( SafeArray x, int y ) // +

{

SafeArray temp = new SafeArray(x.length);

for (int i = 0; i < x.length; ++i) temp[i] = x[i] + y;

return temp;

}

public static SafeArray operator +(int x, SafeArray y) // +

{

SafeArray temp = new SafeArray(y.length);

for (int i = 0; i < y.length; ++i) temp[i] = x + y[i];

return temp;

}

public static SafeArray operator ++ ( SafeArray x ) // ++

{

SafeArray temp = new SafeArray(x.length);

for ( int i = 0; i < x.length; ++i ) temp[i] = ++x.a[i] ;

return temp;

}

public int this[int i] // []

{

get

{

if (i >= 0 && i < length) return a[i];

else throw new IndexOutOfRangeException();

}

set

{

if (i >= 0 && i < length) a[i] = value;

else throw new IndexOutOfRangeException();

}

}

public void Print( string name )

{

Console.WriteLine(name + ": " );

for ( int i = 0; i < length; ++i ) Console.Write("\t" + a[i]);

Console.WriteLine();

}

int[] a; //закритий масив

int length; //закрита розмірність

}

 

class Classl

{

static void Main()

{

try

{

SafeArray a1 = new SafeArray( 5, 2, -1, 1, -2 );

a1.Print ( "Масив 1" );

SafeArray a2 = new SafeArray( 1, 0, 3 );

a2.Print( "Масив 2" );

SafeArray a3 = a1 + a2;

a3.Print( "Сума масивів 1 и 2" );

a1 = a1 + 100; // 1

a1.Print ( "Масив 1 + 100" );

a1 = 100 + a1 ; // 2

a1.Print ("100 + масив 1" );

a2 += ++a2+1; // 3

a2.Print( "++a2.a2 + a2 + 1" );

}

catch ( Exception e )

{

Console.WriteLine( e.Message ) ;

}

}

}

}

 

Щоб забезпечити можливість складання з константою, операція складання перевантажена двічі для випадків, коли константа є першим і другим операндом (оператори 2 і 1).

Складну операцію привласнення += (оператор 3) визначати не потрібно, та це і неможливо. При її виконанні автоматично викликається спочатку операція складання, потім привласнення.

 


<== попередня лекція | наступна лекція ==>
Унарні операції | Операції перетворення типу


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн