Перегрузка.

Методы

Некоторые более опытные ребята уже усекли перегрузку методов в листингах предыдущих статей. Какие же методы мы перегружали?
Мы уже перегружали конструкторы. И перегружали мы их по количеству параметров. В
большинстве примеров присутствуют конструктор по умолчанию, т.е. без параметров, и
конструктор с параметрами. Методы можно перегрузить по количеству параметров, а
также по типам аргументов. Благодаря перегрузке методов, объект может вести себя
по-разному, в зависимости от способа вызова метода. Приведем пример класса с
перегруженными методами. Количество форм метода условимся называть его степенью
перегрузки. Приведем пример класса с перегруженными методами (кто не знаком с
массивами, сейчас будем знакомить, массив - это набор элементов одного типа).

//Этуот пример можно было бы сделать красивее,
//
с динамическим распределением, но некоторым
//
это пока будет сложно
using Sc=System.Console;

class Matrix// класс матрицы
{
//
-Объявим-закрытый-член-класса----------
//
-Массив-10x10-целочисленных-переменных-
//
-Элементов-матрицы---------------------
private int[,] element=new int[4,4];
//
----Конструктор-по-умолчанию---------
public Matrix()
{
int i,j;
//
цикл для прохода по строкам
for(i=0;i<4;i++)
{ //
цикл для прохода по элементам строки
for(j=0;j<4;j++)
{ //
установка в 0 каждого элемента
element[i,j]=0;
}
}
}
//
----Конструктор-с-3мя-параметрами------
//
-строка-столбец-и-значение-------------
//
-устанавливает-в-определенное-значение-
//
-определенный-элемент-а-остальные-в-0--
public Matrix(int line,int row,int value):this()
{
element[line,row]=value;
}
//
----Конструктор-копирования-------
//
-создает-объект-на-основе-объекта-
public Matrix(Matrix ob1)
{
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
element[i,j]=ob1.element[i,j];
}
}
}
//
-теперь-определим-методы-присваивания-и---
//
-получения-значения-определенному-элементу-
public void SetValue(int line,int row,int value)
{
element[line,row]=value;
}
public int GetValue(int line,int row)
{
return element[line,row];
}

//-определим-перегруженный-метод-вывода-
public void Print()//вывод всей матрицы
{
int i,j;//
переменные для циклов
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
Sc.Write(" "+GetValue(i,j));
}
Sc.WriteLine();
}Sc.ReadLine();
}
public void Print(int line)//
вывод строки
{
int j;
for(j=0;j<4;j++)
{
Sc.Write(" "+GetValue(line,j));
}
Sc.WriteLine();
Sc.ReadLine();
}
public void Print(int line,int row)//
вывод элемента
{
Sc.WriteLine("Element["+line+","+row+"]="+GetValue(line,row));
}
//
-и-наконец-метод-ввода-всех-элементов-
public void Scan()
{
int i,j,ii;
for(i=0;i<4;i++)
{
string str1;
ii=i+1;
Sc.WriteLine("Enter string #"+ii);
for(j=0;j<4;j++)
{
Sc.Write("Enter value for element["+i+","+j+"](then press Enter)=>");
str1=Sc.ReadLine();
//
C# не позволяет считывать численные данные
//
непосредственно "в переменные".
//
считываем их в строку, затем "парсим".
//
читай после листинга
element[i,j]=int.Parse(str1);
}
Sc.WriteLine();
}
}
}

class Application
{
public static void Main()
{
Matrix matrix1=new Matrix();
Matrix matrix2=new Matrix(3,3,3);
matrix1.Scan();
Matrix matrix1_copy=new Matrix(matrix1);

Sc.Write("Matrix2->");
matrix2.Print(3,3);//
вывод одного элемента
Sc.WriteLine();
Sc.WriteLine("The very first line of matrix1:");
matrix1.Print(0);//
вывод нулевой строки
Sc.WriteLine("& finally the full matrix1_copy");
matrix1_copy.Print();//
вывод всей матрицы
}

Каждый тип, как я уже сказал - это класс. В каждом классе численного типа определен
метод Parse(string str), который преобразует переданную ему строку в число и
возвращает это число. Тип, возвращаемый методом, идентичен типу, описанному в
классе. Обращение к методу производится следующим образом:

псевдо_имя_типа.Parse(строка);

Где псевдо_имя_типа - это просто название типа в
C#. Вообще, честно говоря, применение консольного режима ограничено.
А теперь о проге. В ней перегружены два метода. Степень перегрузки обоих методов
равна 3. Итак, чтобы перегрузить метод, его достаточно просто повторно описать.
Список параметров у каждой формы метода должен быть уникальным. Перегрузка методов -
это неотъемлемая часть полиморфизма. При вызове метода выполняется та его форма,
аргументы которой подходят под заданные. С методами все. Теперь об операторах.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии