В этот статье поговорим о переопределении операций классов на языке C#.
Допустим, у нас имеется два множества A и B, и нам необходимо написать программу, которая находит их разность. Мы могли бы написать метод, который в качестве аргументов принимал бы множества A и B, а возвращал бы результат:
1 2 3 4 5 6 7 |
static RealSet (RealSet A, RealSet B) { ... return result; } |
Но если переопределить операцию деления (/) для двух аргументов типа (RealSet A, RealSet B), то появляется возможность получить результат выполнив такую операцию:
1 2 |
RealSet C = new RealSet(); C = A / B; |
Или такую:
1 |
RealSet C = A / B; |
Давайте рассмотрим пример программы, которая решает следующую задачу:
Реализовать на языке C# класс «Множество вещественных чисел» такой, чтобы разность двух множеств и присвоение результата третьей переменной-множеству можно было осуществить одной строкой C=A/B, как во время объявлении переменной C, так и после.
Итак, создадим в Visual Studio проект — консольную программу на языке C#. Добавим к решению файл с исходным текстом (там будем писать класс «Множество вещественных чисел») и назовем его, например, myCode.cs. Поместим туда следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
using System; namespace Set_of_real_numbers { class RealSet { float[] x; public RealSet(int n) { x = new float[n]; } public RealSet() { } public void Input(string s) { Console.WriteLine("Введите " + x.GetLength(0) + " элемента(ов) множества " + s + ":"); for (int i = 0; i < x.GetLength(0); i++) { x[i] = (float)Convert.ToDouble(Console.ReadLine()); } } public static RealSet operator /(RealSet A, RealSet B) { int i, j; int k = 0; //количество элементов множества С bool flag = false; //есть ли в множестве В элемент А[i] //определяем количество элементов множества С for (i = 0; i < A.x.GetLength(0); i++) { for (j = 0; j < B.x.GetLength(0); j++) { if (A.x[i] == B.x[j]) { flag = true; break; } } if (!flag) k++; else flag = false; } //заполняем множество result результатом вычитания множеств A и B RealSet result = new RealSet(k); k = 0; for (i = 0; i < A.x.GetLength(0); i++) { for (j = 0; j < B.x.GetLength(0); j++) { if (A.x[i] == B.x[j]) { flag = true; break; } } if (!flag) { result.x[k] = A.x[i]; k++; } else flag = false; } return result; } public void Output(string s) { Console.Write(s + " = {"); for (int i = 0; i < x.GetLength(0); i++) Console.Write(x[i] + " "); Console.Write("}\n"); } } } |
Пространство имен: Set_of_real_numbers, класс: RealSet. Прокомментирую код по строчкам:
7: Массив, в котором будут хранится элементы множества.
9: Конструктор класса, принимает в качестве аргумента целое число — количество элементов в множестве.
14: Конструктор по умолчанию — не принимает аргументов.
Примечание. Конструктор — это нечто вроде метода, который содержит набор инструкций и исполняется при создании объекта класса. Не наследуется и не имеет явно определенного типа возвращаемых данных.
19: Этот метод осуществляет заполнение множества числами, посредством ввода их с клавиатуры.
28: Здесь переопределяем операцию / для двух операндов типа RealSet, с помощью ключевого слова operator.И в этом методе описываем алгоритм вычитания двух множеств.
73: Метод выводит на экран элементы множества экземпляра класса.
Теперь рассмотрим файл Program.cs. Его листинг представлен ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; using Set_of_real_numbers; namespace redefinitionOfOperationsClasses { class Program { static void Main(string[] args) { int n; Console.Write("Введите количество элементов множества А: "); n = Convert.ToInt32(Console.ReadLine()); RealSet A = new RealSet(n); A.Input("A"); Console.Write("Введите количество элементов множества B: "); n = Convert.ToInt32(Console.ReadLine()); RealSet B = new RealSet(n); B.Input("B"); RealSet C = A / B; //тоже работает //RealSet C = new RealSet(); //C = A / B; Console.WriteLine(); A.Output("A"); B.Output("B"); C.Output("C"); Console.ReadLine(); } } } |
2: С помощью директивы using включаем в программу пространство имен из файла myCode.cs.
10-18: Заполняем множества A и B элементами.
20: Вычисляем разность множеств, результат заносится в экземпляр C. Разность также можно вычислить с помощью кода, написанного в строках 22 и 23.
25-28: Выводим результат на экран.
Демонстрация работы программы представлена на рисунке:
Если хотите скачать исходник программы, то нажмите на кнопку ниже:
Скачать исходник
Поделиться в соц. сетях: