русс | укр

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

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


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


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


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


 

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

+ - ! - ++ -- true false

 

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

 

тип operator унарна_операція ( параметр )

 

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

public static int operator +(MyObject m )

public static MyObject operator -- ( MyObject m )

public static bool operator true(MyObject m )

 

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

§ для операцій +, - ! ~ величину будь-якого типу;

§ для операцій ++ -- величину типу класу, для якого вона відзначається;

§ для операцій true і false величину типу bool.

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

Префіксний і постфіксний інкременти не розрізняються.

Як приклад удосконалимо приведений в лістингу 7.3 клас Safearray для зручної і безпечної роботи з масивом. До класу внесені наступні зміни:

§ доданий конструктор, що дозволяє ініціалізувати масив звичайним масивом або серією цілочисельних значень довільного розміру;

§ додана операція інкремента;

§ доданий допоміжний метод Print виведення масиву;

§ змінена стратегія обробки помилок виходу за межі масиву;

§ знята вимога, щоб елементи масиву приймали значення в заданому діапазоні.

Текст програми приведений в лістингу 7.5.

 

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace examp44

{

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 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 Class1

{

static void Main()

{

try

{

int[] f = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

SafeArray a1 = new SafeArray(f);

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

a1++;

a1.Print("Інкремент масиву 1");

}

catch (Exception e) // обробка виключення

{

Console.WriteLine(e.Message);

}

}

}

}


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


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