Перегрузка операций класса

 

В некоторых классах используются фрагменты кода (блоки), в заголовках которых используется имя класса (но не конструктор) после которого, но до круглых скобок формальных параметров, используется служебное словоoperator. С помощью этого слова обозначается механизм перегрузки операций, который позволяет использовать в обычных математических выражениях переменный типа класс. Например, если для класса «студент» перегружена операция сложения (operator+) и в программе созданы два объекта типа «студент» – ct1 и ct2, то можно записать выражение ct1 + ct2.

Что означает сложение двух объектов? Может быть, мы объединяем их имена или суммируем возраст?

Для этих целей и используется перегрузка операций, которая четко прописывает, что должно суммироваться при суммировании двух объектов, например, необходимо суммировать их оценки.

Служебное слово operator указывает, что осуществляется перегрузка операции, а операция « + », что перегружается операция сложения.

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

Перегрузка операции класса описываются с помощью методов специального вида (функций-операций).

Формат записи перегрузки операции имеет следующий вид:

спецификаторы имя класса operator имя операции (формальные параметры) {тело }

В качестве спецификаторов обычно одновременно используются ключевые слова public и static. Кроме того, операцию можно объявить как внешнюю (extern).

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

Например:

public static int operator+ (Stydent S1, Stydent S2)

{

return S1.Ocenka + S2.Ocenka;

}

Если мы определили перегружаемую операцию для « + », то это не означает, что мы определили перегрузку операции «++» или «+=». Это другие операции и их необходимо определять самостоятельно.

Если мы вводим перегружаемую операцию для некоторого класса, то ее действия должны быть ограничены только данными этого класса.

Необходимо отметить, что перегрузка операций не создает новые операции, а только адаптирует существующие к данным типа класс.

При описании перегрузки операций необходимо соблюдать следующие правила:

– операция должна быть описана как открытый статический метод класса (спецификаторыpublic static);

– формальные параметры в операцию должны передаваться по значению (то есть не должны предваряться ключевыми словами ref или out);

– форматы записей всех операций класса должны различаться.

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

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

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public class Stydent

{

int Ocenka;

string Name;

public string ss;

public int Aa

{

get { return Ocenka;}

set {if (value>=2 && value <=5) Ocenka = value; else ss="Вводите правильно значение оценки \r\n";}

}

 

public void Vvod(string name)

{

Name = name;

}

public static int operator+ (Stydent S1, Stydent S2)

{

return S1.Ocenka + S2.Ocenka;

}

}

public Stydent[] styd = new Stydent[5];

public static int n=0;

public Form1()

{

InitializeComponent();

textBox1.Text = "";

n = 0;

}

 

private void button1_Click(object sender, EventArgs e)

{

int Oc;

string fio,In;

Stydent st = new Stydent();

fio = textBox2.Text;

st.Vvod(fio);

In = textBox3.Text;

Oc = Convert.ToInt32(In);

st.Aa = Oc;

 

styd[n] = st;

textBox1.AppendText("Имя студента " + fio + " Его оценка = " + styd[n].Aa.ToString() +"\r\n");

if (st.Aa != 0) n++;

if (n == 2) textBox1.AppendText("Сумма оценок двух студентов = " + (styd[0] + styd[1]).ToString() + "\r\n");

}

}

}

 

 

 

Рисунок 8.3 – Пример перегрузки операции сложения

 

 








Дата добавления: 2018-11-25; просмотров: 271;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.