Как реализовать интерфейс IComparable и перегрузить операции отношения? - C# (201042)
Формулировка задачи:
помогите, прошу очень-очень, суть вопроса внизу
Задание, на основе которого написан код:
Строки данного класса могут содержать только символы "0" или "1".Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде.
Для класса Битовая_строка определить следующие методы:
- конструктор, принимающий в качестве параметра строковый литерал;
- деструктор;
- изменение знака на противоположный (перевод числа в дополнительный код);
- присваивание;
- вычисление арифметической суммы строк;
- проверка на равенство.
В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.
Сделала как написано, а теперь нужно выполнить то же задание используя для хранения экземпляров разработанных классов стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на свое усмотрение.
using System;
using System.Collections.Generic;
using System.Text;
namespace lab
{
class stroka
{
public string[] st = new string[20];
public int dlina;
public stroka(string[] stp)
{
st = stp;
}
public stroka(char a)
{
st[0] = Convert.ToString(a);
}
public stroka()
{ }
public void dlina_method(int a)
{
this.dlina = a;
}
public void chistka()
{
this.st = null;
this.dlina = 0;
}
}
class bit_stroka : stroka
{
public bool znak;
public string st = " ";
public bit_stroka(string stp)
{
st = stp;
}
~bit_stroka()
{
}
public static bit_stroka operator +(bit_stroka m1, bit_stroka m2)
{
bit_stroka str = new bit_stroka("0000000000000000000");
char[] a = str.st.ToCharArray();
for (int i = m1.st.Length - 1; i >= 0; i--)
a[i] = Convert.ToString(Convert.ToInt32(Convert.ToString(m1.st[i])) + Convert.ToInt32(Convert.ToString(m2.st[i])))[0];
for (int i = m1.st.Length - 1; i > 0; i--)
{
if (a[i] == '2')
{
a[i - 1] = Convert.ToString(Convert.ToInt32(Convert.ToString(a[i-1])) + 1)[0];
a[i] = '0';
}
if (a[i] == '3')
{
a[i - 1] = Convert.ToString(Convert.ToInt32(Convert.ToString(a[i-1])) + 1)[0];
a[i] = '1';
}
}
string g = "";
for (int i = 0; i < a.Length; i++)
g += a[i];
str.st = g;
return str;
}
public static bool operator ==(bit_stroka m1, bit_stroka m2)
{
bool x;
if (m1.st == m2.st)
x = true;
else x = false;
return x;
}
public static bool operator !=(bit_stroka m1, bit_stroka m2)
{
bool x;
if (m1.st != m2.st)
x = true;
else x = false;
return x;
}
public static bit_stroka dop_kod(bit_stroka m1)
{
char[] a = m1.st.ToCharArray();
if (m1.znak == false)
{
for (int i = a.Length-1; i >= 0; i--)
{
if (a[i] == '0')
a[i] = '1';
else
a[i] = '0';
}
a[0] = Convert.ToChar(Convert.ToInt32(a[a.Length -1]) + 1);
for (int i = a.Length-1; i >= 0; i--)
{
if (a[i] == '2')
{
a[i - 1] = Convert.ToChar(Convert.ToInt32(a[i]) + 1);
a[i] = '0';
}
if (a[i] == '3')
{
a[i - 1] = Convert.ToChar(Convert.ToInt32(a[i]) + 1);
a[i] = '1';
}
}
m1.znak = true;
}
string g = "";
for (int i = 0; i < a.Length; i++)
g += a[i];
m1.st = g;
return m1;
}
public static bit_stroka prisvaivanie(string str)
{
bit_stroka m1 = new bit_stroka(str);
return m1;
}
}
class Program
{
static void Main(string[] args)
{
bit_stroka m1, m2, m3;
m1 = bit_stroka.prisvaivanie("0000000000000110001");
m2 = bit_stroka.prisvaivanie("0000000000000011001");
Console.WriteLine("\n Первое число = "+ m1.st);
Console.WriteLine("\n Второе число = "+ m2.st);
m1 = bit_stroka.dop_kod(m1);
Console.WriteLine("\n Умножение чисел = "+ m1.st);
m3 = m1 + m2;
Console.WriteLine("\n Сумма чисел = "+ m3.st);
Console.WriteLine("\n Сравнение чисел m1 и m2");
if (m2 == m1)
Console.WriteLine(" Числа равны");
else
Console.WriteLine(" Числа не равны");
// Console.WriteLine("{0}\n{1}\n{2}", m1.st, m2.st,m3.st);
Console.ReadLine();
}
}
}Решение задачи: «Как реализовать интерфейс IComparable и перегрузить операции отношения?»
textual
Листинг программы
return this.dlina.CompareTo(s.dlina);