- •Предисловие
- •1 Среда визуального программирования visual studio.Net
- •1.1 Введение в объектно - ориентированное программирование
- •1.2 Понятие о событийном управлении Windows
- •1.3 Основные окна среды Visual Studio.Net
- •1.4 Основные структурные элементы разработки проекта c#
- •1.5 Пример первой учебной программы
- •2.1 Технология визуального проектирования форм
- •1.6 Вопросы для самопроверки
- •2 Элементы управления
- •2.2 Элементы управления панели Toolbox
- •2.3 Пример использования элементов управления
- •2.4 Вопросы для самопроверки
- •3 Графический интерфейс языка c#
- •3.1 Пространство имен System.Drawing
- •3.2 Класс Graphics
- •3.3 Пример программной реализации
- •3.4 Вопросы для самопроверки
- •4 Использование меню в приложении
- •4.1 Меню программы
- •4.2 Создание инструментальной панели приложения
- •4.3.Вопросы для самопроверки
- •5 Использование диалоговых меню
- •5.1 Обработчики событий для работы с матрицей
- •5.2 Обработчик событий для открытия файла
- •5.3 Обработчик событий для записи в файл
- •5.4 Обработчик событий для работы с текстом
- •5.5 Вопросы для самопроверки
- •6 Многооконные приложения
- •6.1 Создание «кнопочной» главной формы
- •6.2 Добавление новых форм приложения
- •6.3 Обработчики событий главной формы
- •6.4 Табличная форма представления и редактирования значений
- •6.5 Графическая форма представления прямоугольников
- •6.6 Вопросы для самопроверки
- •7. Понятие класса
- •7.1 Понятие класса
- •7.2 Состав класса
- •7.3 Методы класса
- •7.4 Структура объекта
- •7.5 Пример учебной программы
- •7.6 Доступ к полям
- •7.7 Вопросы для самопроверки
- •1 Понятие класса?
- •8 Элементы классов
- •8.1 Конструкторы
- •8.2 Деструкторы
- •8.3 Свойства
- •8.4 Параметр по ссылке this
- •8.5 События класса
- •8.6 Перегрузка операций класса
- •8.7 Вопросы для самопроверки
- •9 Принципы ооп
- •9.1 Понятие инкапсуляции
- •9.2 Понятие наследования
- •9.3 Вопросы для самопроверки
- •10 Принцип полиморфизма
- •10.1 Понятие полиморфизма
- •10.2 Пример статического наследования методов
- •10.3 Пример динамического наследования методов
- •10.4 Вопросы для самопроверки
- •11 Использование интерфейсов
- •11.1 Понятие интерфейса
- •11.2 Синтаксис интерфейса
- •11.3 Использование стандартного интерфейса iEnumerable
- •11.4 Вопросы для самопроверки
- •12 Композиция и коллекция классов
- •12.1 Понятие композиции и коллекции класса
- •12.2 Пример использования композиции и коллекции класса
- •12.3 Некоторые коллекции Framework
- •12.4 Коллекция ArrayList
- •12.5 Вопросы для самопроверки
- •13 Делегаты
- •13.1 Понятие делегата
- •13.2 Описание делегата
- •13.3 Пример использования делегата
- •13.4 Совместимость делегатов
- •13.5 Методы базовых классов делегатов
- •13.6 Вопросы для самопроверки
- •14 События
- •14.1 Понятие события
- •14.2 Некоторые часто используемые события среды Visual Studio.Net
- •14.3 Пример использования стандартных событий классов
- •14.4 Нестандартные события классов
- •14.5 Вопросы для самопроверки
- •Приложение а Ответы на вопросы для самопроверки
- •1 Понятие класса?
- •Предметный указатель
- •Список литературы
8.6 Перегрузка операций класса
В некоторых классах используются фрагменты кода (блоки), в заголовках которых используется имя класса (но не конструктор) после которого, до круглых скобок формальных параметров, используется служебное слово 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.
Рисунок 8.3 – Пример перегрузки операции сложения
