На этом шаге мы приведем простейший пример перегрузки арифметических операторов.
Как иллюстрацию к перегрузке операторов мы рассмотрим небольшой и очень простой пример, в котором выполняется перегрузка оператора сложения для объектов пользовательского класса.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr106_1 { class Program { // Класс с перегрузкой оператора сложения: class MyClass { // Целочисленное поле: public int number; // Конструктор с целочисленным аргументом: public MyClass(int n) { // Присваивание значения полю: number = n; } // Операторный метод для перегрузки оператора сложения: public static int operator+(MyClass a, MyClass b) { // Локальная целочисленная переменная: int m = a.number + b.number; // Результат метода: return m; } } // Класс с главным методом: static void Main() { // Создание объектов класса MyClass: MyClass A = new MyClass(100); MyClass B = new MyClass(200); // Целочисленная переменная: int num; // Вычисление суммы объектов: num = A + B; // Отображение результата вычисления суммы объектов: Console.WriteLine("A + B = " + num); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы будет таким:
Рис.1. Результат выполнения программы
Проанализируем программный код примера. В первую очередь нас будет интересовать класс MyClass, поскольку в нем есть операторный метод, с помощью которого выполняется перегрузка оператора сложения для объектов класса.
У класса есть целочисленное поле number, а также конструктор с одним аргументом (который определяет значение поля). Но нас интересует программный код с описанием операторного метода operator*():
// Операторный метод для перегрузки оператора сложения: public static int operator+(MyClass a, MyClass b) { // Локальная целочисленная переменная: int m = a.number + b.number; // Результат метода: return m; }
О чем свидетельствует этот программный код? Атрибуты public и static являются обязательными. Название метода operator+ означает, что метод соответствует оператору "плюс" +. Аргументов у метода два, то есть речь идет о бинарной операции. Оба аргумента описаны как такие, что относятся к классу MyClass. Следовательно, операторный метод будет вызываться для вычисления значения выражений вида А + В, в котором оба операнда А и В являются объектами класса MyClass. Идентификатором типа результата для операторного метода указано ключевое слово int. Поэтому результатом выражения вида А + В будет целое число. Чтобы понять, какое именно, необходимо проанализировать команды в теле метода. Там их всего две. Сначала командой
int m = a.number + b.number;
num = A + B;
Мы могли переопределить оператор сложения и по-другому, как в плане операндов (аргументов метода), так и в плане результата метода.
На следующем шаге мы продолжим изучение этого вопроса.