Как реализовать интерфейс IComparable и перегрузить операции отношения? - C# (194411)
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, с заданием:
А вот задание к 9-ому:
Описать базовый класс Строка.
Обязательные поля класса:
• поле для хранения символов строки;
• значение типа ushort для хранения длины строки в байтах.
Реализовать обязательные методы следующего назначения:
• конструктор без параметров;
• конструктор, принимающий в качестве параметра строковый литерал;
• конструктор, принимающий в качестве параметра символ;
• метод получения длины строки;
• метод очистки строки (сделать строку пустой).
Описать производный от Строка класс Десятичная_строка. Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Десятичная_строка принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.
Для класса определить следующие методы:
• конструктор, принимающий в качестве параметра число;
• арифметическая разность строк;
• проверка на больше (по значению);
• проверка на меньше (по значению).
Выполнить задание 9, используя для хранения экземпляров разработанных классов стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю.
Вот код к 9-ому заданию. Он правильный и в нем все выполнено.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication2
- {
- internal class Str
- {
- private int bytesize;
- private string str;
- // конструктор без параметров
- public Str()
- {
- }
- // конструктор, принимающий в качестве параметра строковый литерал
- public Str(string str)
- {
- this.str = str;
- bytesize = (int)str.Length;
- }
- // конструктор, принимающий в качестве параметра символ;
- public Str(char ch)
- {
- str = Convert.ToString(ch);
- bytesize = 1;
- }
- // Метод получения длины строки
- public void SizeDef()
- {
- bytesize = str.Length * sizeof(char);
- }
- // Метод очищающий стоку.
- public void Clear()
- {
- str = "";
- bytesize = 0;
- }
- }
- internal class DecString : Str
- {
- // Конструктор для десятичной строки.
- public DecString(string str)
- {
- int x;
- int.TryParse(str, out x);
- var sb = new StringBuilder();
- bool minus = false;
- if (x < 0)
- {
- sb.Append("-", 0, 0);
- }
- x = Math.Abs(x);
- if (x == 0)
- {
- sb.Insert(0, "0");
- }
- else
- {
- while (x > 0)
- {
- int temp = x % 10;
- sb.Insert(0, temp.ToString());
- x /= 10;
- }
- if (minus == true)
- {
- sb.Insert(0, "-");
- }
- }
- bs = sb.ToString();
- }
- public string bs { get; set; }
- public static DecString operator -(DecString l, DecString r)
- {
- int result = Int32.Parse(l.bs) - Int32.Parse(r.bs);
- return new DecString(string.Format("" + result));
- }
- public static bool operator <(DecString l, DecString r)
- {
- int li = Int32.Parse(l.bs);
- int ri = Int32.Parse(r.bs);
- return li < ri;
- }
- public static bool operator >(DecString l, DecString r)
- {
- int li = Int32.Parse(l.bs);
- int ri = Int32.Parse(r.bs);
- return li > ri;
- }
- public static bool operator ==(DecString l, DecString r)
- {
- int li = Int32.Parse(l.bs);
- int ri = Int32.Parse(r.bs);
- return li == ri;
- }
- public static bool operator != (DecString l, DecString r)
- {
- int li = Int32.Parse(l.bs);
- int ri = Int32.Parse(r.bs);
- return li != ri;
- }
- }
- public class Program
- {
- static void Main(string[] args)
- {
- Str[] decStrsArray = new DecString[3];
- DecString d1 = new DecString("50");
- decStrsArray[0] = d1;
- DecString d2 = new DecString("10");
- decStrsArray[1] = d2;
- DecString d3 = new DecString("10");
- decStrsArray[2] = d3;
- Console.WriteLine(d2 != d1);
- Console.ReadLine();
- }
- }
- }
Помогите хоть чем нибудь)
Дайте комментарии, чтобы составить программу.
Решение задачи: «Как реализовать интерфейс IComparable и перегрузить операции отношения?»
textual
Листинг программы
- internal class Str : IComparable<Str>
- {
- private int bytesize;
- private string str;
- public string S
- {
- get { return str; }
- set { str = value; }
- }
- // конструктор без параметров
- public Str()
- {
- }
- // конструктор, принимающий в качестве параметра строковый литерал
- public Str(string str)
- {
- this.str = str;
- bytesize = (int)str.Length;
- }
- // конструктор, принимающий в качестве параметра символ;
- public Str(char ch)
- {
- str = Convert.ToString(ch);
- bytesize = 1;
- }
- // Метод получения длины строки
- public void SizeDef()
- {
- bytesize = str.Length * sizeof(char);
- }
- // Метод очищающий стоку.
- public void Clear()
- {
- str = "";
- bytesize = 0;
- }
- public int CompareTo(Str other)
- {
- return str.CompareTo(other.S);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д