
- •Простейший класс
- •Класс с конструкторами
- •Перегрузка конструкторов
- •Использование свойств в классе
- •Применение свойства наследования на примере виртуальных и абстрактных классов
- •Использование интерфейсов
- •Сравнение обычного массива и семейства
- •Сравнение обычного массива и семейства
- •Создание семейств. Использование индексаторов
- •Перегрузка простейших операций в простейших классах
- •Перегрузка операций с использованием стандартных интерфейсов и методов класса Object
- •Использование делегатов в качестве параметров функции
- •Создание собственной библиотеки классов
Перегрузка простейших операций в простейших классах
Условие задачи
Реализовать класс из индивидуального задания. Каждый разрабатываемый класс должен содержать:
скрытые данные
перегрузку конструкторов
свойства класса
индексаторы (если необходимо)
указанные перегруженные операции.
При возникновении ошибок должны генерироваться исключения. В программе должна выполняться работоспособность всех разработанных элементов класса
Вариант 14. Класс “Дробь”. Перегрузить +, унарный плюс
Листинг программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Laba_10
{
class Dorob
{
int x;
int y;
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
public Dorob(int x, int y)
{
X = x;
Y = y;
}
public static Dorob operator +(Dorob z)
{
int temp;
temp = z.X;
z.Y = temp;
return z;
}
public static Dorob operator +(Dorob z, int c)
{
z.X = z.X + c;
z.Y = z.Y + c;
return z;
}
public static Dorob operator +(int c, Dorob z)
{
z.X = z.X + c;
z.Y = z.Y + c;
return z;
}
public void Print(string name)
{
Console.WriteLine(name + ":\nx=" + X + " y=" + Y);
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
Dorob a = new Dorob(15, 32);
a.Print("Дробь x/y");
a.Print("Дробь после унарного плюса "+(+a));
Console.WriteLine("Введите число которое следует прибавить ко всем числам в дроби");
int m = Convert.ToInt32(Console.ReadLine());
a += m;
a.Print("Дробь после сложения");
Console.ReadKey();
}
}
}
Тестирование программы
Рисунок 11 – Тестирование программы
Перегрузка операций с использованием стандартных интерфейсов и методов класса Object
Условие задачи
Каждый разрабатываемый класс должен содержать:
скрытые данные
перегрузку конструкторов
свойства класса
индексаторы (где требуется)
указанные перегруженные операции. Если операции не указаны, перегрузить операцию =, ==, !=. Реализовать перегрузку 2 способами:
Используя открытые методы класса object
Используя стандартный интерфейс IComparable
При возникновении ошибок должны генерироваться исключения. В программе должна выполняться работоспособность всех разработанных элементов класса.
В основной программе описать массив из экземпляров разработанного класса. Реализовать следующие операции:
Создать клон разработанного класса
Отсортировать массив по одному критерию сортировки
Отсортировать массив по нескольким (заданным) критериям сортировки
Организовать перебор элементов массива с помощью простейшего итератора foreach.
Перечисленные операции (4) организовать в программе как меню с выбором пользователем определенного действия.
Вариант 14. Класс “Каталог”. Поля – имя каталога, путь к каталогу, дата создания, количество файлов
Листинг программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Katalog11
{
public class Katalog : IComparable
{
string name;
public string Name
{
get { return name; }
set { name = value; }
}
int browe;
public int Browe
{
get { return browe; }
set { browe = value; }
}
int date;
public int Date
{
get { return date; }
set { date = value; }
}
int files;
public int Files
{
get { return files; }
set { files = value; }
}
public Katalog() { }
public Katalog(string Name, int Date, int Files, int Browe)
{
this.Name = Name;
this.Date = Date;
this.Files = Files;
this.Browe = Browe;
}
public void Dannie()
{
Console.WriteLine("Имя каталога: {0} Путь к катологу: {1} Дата создания: {2} Количество файлов: {3}", Name, Browe, Date, Files);
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType()) return false;
Katalog temp = (Katalog)obj;
return (Name == temp.Name && Browe == temp.Browe && Date == temp.Date && Files == temp.Files);
}
public override int GetHashCode()
{
return Browe.GetHashCode();
}
public static bool operator ==(Katalog a, Katalog b)
{
return a.Browe == b.Browe;
}
public static bool operator !=(Katalog a, Katalog b)
{
return !a.Equals(b);
}
public static bool operator <(Katalog a, Katalog b)
{
return (a.CompareTo(b) < 0);
}
public static bool operator >(Katalog a, Katalog b)
{
return (a.CompareTo(b) > 0);
}
public int CompareTo(object obj)
{
Katalog temp = (Katalog)obj;
if (this.Browe > temp.Browe) return 1;
if (this.Browe < temp.Browe) return -1;
return 0;
}
}
class Program
{
static void Main(string[] args)
{
Katalog[] a = new Katalog[5];
Katalog Temp = new Katalog();
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Напишите имя, путь к файлу, дату создания и количество файлов");
a[i] = new Katalog(Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
}
select:
Console.WriteLine("Выберите действие:\n1.Создать копию Каталога\n2.отсортировать по дате создания\n3.отсортировать по дате создания и кол-ву фалов \n4.Вывести информацию о каталоге");
switch (Console.ReadLine())
{
case "1":
{
Katalog[] Copy = new Katalog[5];
Copy = a;
break;
}
case "2":
{
int K = 0;
do
{
K = 0;
for (int i = 0; i < 4; i++)
{
if (a[i] < a[i + 1]) { Temp = a[i]; a[i] = a[i + 1]; a[i + 1] = Temp; K = 1; }
}
} while (K == 1);
break;
}
case "3":
{
int K;
do
{
K = 0;
for (int i = 0; i < 4; i++)
{
if (a[i] < a[i + 1]) { Temp = a[i]; a[i] = a[i + 1]; a[i + 1] = Temp; K = 1; };
}
} while (K == 1);
do
{
K = 0;
for (int i = 0; i < 4; i++)
{
if (a[i] == a[i + 1]) { if (a[i].Browe > a[i + 1].Browe) { Temp = a[i]; a[i] = a[i + 1]; a[i + 1] = Temp; K = 1; } }
}
} while (K == 1);
break;
}
case "4":
{
foreach (Katalog x in a) { x.Dannie(); }
break;
}
}
goto select;
}
}
}
Тестирование программы
Рисунок 12 – Тестирование программы