Создать класс, реализующий перегрузку операторов, разработать оконное приложение для работы с методами класса - C#
Формулировка задачи:
Помоготите кто может)))пожалуйста)
Цель работы: Познакомиться с принципами перегрузки операторов в ЯП С#. Создать класс, реализующий перегрузку операторов, разработать оконное приложение для работы с методами данного класса.
Общее задание:
1) Выполнить задание по вариантам, реализовав один или несколько предложенных классов. Классы должны содержать перегруженные версии арифметических операторов и оператора индексации, а также все необходимые конструкторы, поля и свойства;
2) Реализовать оконное приложение для работы с классами (создание объектов, ввод параметров, выполнение операций).
Замечания:
1) В некоторых заданиях требуется создать класс, представляющий вектор объектов заданного типа. Реализация такого класса является тривиальной, а сам класс играет сугубо рудиментарную роль (нужен только для того, чтобы самостоятельно реализовать операцию индексации);
2) Во всех классах необходимо предусмотреть корректную обработку некорректных входных данных.
Задание:
8) Реализовать класс Восьмеричное число. Перегрузить арифметические операторы для выполнения сложения, умножения, вычитания и деления объектов класса Восьмеричное число. Создать класс Вектор восьмеричных чисел с перегрузкой операции индексации.
Решение задачи: «Создать класс, реализующий перегрузку операторов, разработать оконное приложение для работы с методами класса»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication21
{
public class OctNumber
{
//Внутренее представление (Int32)
private int innerNumber;
//Цепочка конструкторов
public OctNumber(int intNumber)
: this(intNumber.ToString()) { }
public OctNumber(string strNumber)
{
//Проверка данных
bool check = strNumber.Any((Func<char, bool>)delegate(char ch)
{
return (char.IsDigit(ch) && char.GetNumericValue(ch) > 7);
});
//Если проверка не прошла-выбрасываем исключение. Не забыть отловить его!!!
if (check)
throw new ArgumentException("Invalid argument!");
else
innerNumber = Convert.ToInt32(strNumber, 8);
}
//Оператор сложения
public static OctNumber operator +(OctNumber num1, OctNumber num2)
{
int temp1 = Convert.ToInt32(num1.ToString(), 8);
int temp2 = Convert.ToInt32(num2.ToString(), 8);
string temp = Convert.ToString((temp1 + temp2), 8);
return new OctNumber(temp);
}
//Оператор вычитания
public static OctNumber operator -(OctNumber num1, OctNumber num2)
{
int temp1 = Convert.ToInt32(num1.ToString(), 8);
int temp2 = Convert.ToInt32(num2.ToString(), 8);
string temp = Convert.ToString((temp1 - temp2), 8);
return new OctNumber(temp);
}
//Оператор умножения
public static OctNumber operator *(OctNumber num1, OctNumber num2)
{
int temp1 = Convert.ToInt32(num1.ToString(), 8);
int temp2 = Convert.ToInt32(num2.ToString(), 8);
string temp = Convert.ToString((temp1 * temp2), 8);
return new OctNumber(temp);
}
//Оператор деления
public static OctNumber operator /(OctNumber num1, OctNumber num2)
{
int temp1 = Convert.ToInt32(num1.ToString(), 8);
int temp2 = Convert.ToInt32(num2.ToString(), 8);
string temp = Convert.ToString((temp1 / temp2), 8);
return new OctNumber(temp);
}
//Перегрузка Equals()
public override bool Equals(object obj)
{
if (obj is OctNumber)
{
return this.ToString() == ((OctNumber)obj).ToString();
}
return false;
}
//Перегрузка GetHashCode()
public override int GetHashCode()
{
return this.innerNumber.GetHashCode();
}
//Перегрузка ToString()
public override string ToString()
{
return Convert.ToString(innerNumber, 8);
}
}
}