Переопределение операций

Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 10:32, лабораторная работа

Краткое описание

Задание. В программах требуется описать базовый класс (возможно, абстрактный), в котором с помощью виртуальных методов ИЛИ И абстрактных свойств задается интерфейс ДЛЯ производных классов. Целью лабораторной работы является максимальное использование наследования, даже если для конкретной задачи оно не дает выигрыша в объеме программы. Во всех классах следует переопределить метод Equals, чтобы обеспечить сравнение значений.
Функция Главный должна содержать массив из элементов базового класса, заполненный ссылками на производные классы. В этой функции должно демонстрироваться использование всех разработанных элементов классов.

Прикрепленные файлы: 1 файл

C#. Переопределение операций.doc

— 127.50 Кб (Скачать документ)

            int lenght = Convert.ToInt32(Console.ReadLine());

            series = new Pair[lenght];

            Console.WriteLine("Вводите элементы: ");

            int boof1, boof2;

            int moneyCounter = 0, complexCounter = 0;

            for (int i = 0; i < series.Length; i++)

            {

                Console.WriteLine("Хотите ввести деньгу или комплексное число? (д/к)");

                string choice = Console.ReadLine();

                Console.WriteLine(" * Число номер: " + (i+1));

                Console.WriteLine("Введите первую цифру");

                boof1 = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("Введите вторую цифру");

                boof2 = Convert.ToInt32(Console.ReadLine());

                switch (choice)

                {

                    case "д":

                        {

                            series[i] = new Money(boof1, boof2);

                            moneyCounter += 1;

                        } break;

                    case "к":

                        {

                            series[i] = new Complex(boof1, boof2);

                            complexCounter += 1;

                        } break;

                }

 

            }

            Complex[] complexVector = new Complex[complexCounter];

            Money[] moneyVector = new Money[moneyCounter];

 

            complexCounter = 0;

            moneyCounter = 0;

            for (int i = 0; i < series.Length; i++)

            {

                switch (series[i].ToString())

                {

                    case "Complex":

                        {

                            complexVector[complexCounter] = new Complex(series[i].X, series[i].Y);

                            complexCounter += 1;

                        } break;

                    case "Money":

                        {

                            moneyVector[moneyCounter] = new Money(series[i].X, series[i].Y);

                            moneyCounter += 1;

                        } break;

                }

            }

 

            if (complexVector.Length != 0)

            {

                Console.WriteLine("Массив комплексных чисел:");

                for (int i = 0; i < complexVector.Length; i++)

                {

                    Console.Write(complexVector[i].OutPut() + "; ");

                }

            }

            else

                Console.WriteLine("Комплексных чисел в массиве нет!");

            Console.WriteLine();

            if (moneyVector.Length != 0)

            {

                Console.WriteLine("Массив денег:");

                for (int i = 0; i < moneyVector.Length; i++)

                {

                    Console.Write(moneyVector[i].OutPut() + "; ");

                }

            }

            else

                Console.WriteLine("Денег в массиве нет!");

            Console.WriteLine("Для продолжения нажмите ENTER");

            Console.ReadLine();

        }

 

        static void Main(string[] args)

        {

           

            while (true)

            {

                Console.WriteLine("Привет!");

                Console.WriteLine("Выберите пункт:");

                Console.WriteLine("1 - для работы с деньгами");

                Console.WriteLine("2 - для работы с комплексными числами");

                Console.WriteLine("3 - для работы с массивом пар");

                Console.WriteLine("0 - Выход");

                string s = Console.ReadLine();

                switch (s)

                {

                    case "1":

                        {

                            Task1();

                        } break;

                    case "2":

                        {

                            Task2();

                        } break;

                    case "3":

                        {

                            Task3();

                        } break;

                    case "0":

                        {

                            return;

                        }

                }

                Console.Clear();

            }

        }

    }

 

// Класс Pair

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Lab2

{

    abstract class Pair

    {

        protected int x = 0;

        protected int y = 0;

 

        public abstract int X { get; set; }

        public abstract int Y { get; set; }

 

        abstract public string OutPut();

        override abstract public string ToString();

    }

}

 

//Класс Money

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Lab2

{

    class Money:Pair,IComparable

    {

        public Money(int x, int y)

        {

            if (y > 100)

            {

                x += y / 100;

                y = y % 100;

            }

            this.x = x;

            this.y = y;

        }

 

        public override int X

        {

            get

            {

                return x;

            }

            set

            {

                this.x = value;

            }

        }

        public override int Y

        {

            get

            {

                return y;

            }

            set

            {

                y = value;

                if (y > 100)

                {

                    x += y / 100;

                    y = y % 100;

                }

            }

        }

 

        public override string OutPut()

        {

            return Convert.ToString(x) + " Dollars " + Convert.ToString(y) + " Cents";

        }

        public override string ToString()

        {

            return "Money";

        }

 

        public override bool Equals(object obj)

        {

            Money moneyObj = obj as Money;

            if ((this.X == moneyObj.X) && (this.Y == moneyObj.Y))

                return true;

            else

                return false;

        }

        public int CompareTo(object obj)

        {

            if (obj == null)

                return 1;

            Money otherMoney = obj as Money;

                if (this.X > otherMoney.X)

                    return 1;

                else

                    if (this.X < otherMoney.X)

                        return -1;

                    else

                        if (this.Y > otherMoney.Y)

                            return 1;

                        else

                            if (this.Y == otherMoney.Y)

                                return 0;

                            else

                                return -1;

        }

 

        public static Money operator +(Money _1, Money _2)

        {

            return new Money(_1.X + _2.X, _1.Y + _2.Y);

        }

        public static Money operator *(Money _1, Money _2)

        {

           

            return new Money(_1.X * _2.X, _1.Y * _2.Y);

        }

    }

}

 

 

//Класс Complex

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Lab2

{

    class Complex:Pair,IComparable

    {

        public Complex(int x, int y)

        {

            this.x = x;

            this.y = y;

        }

 

        public override int X

        {

            get

            {

                return x;

            }

            set

            {

                this.x = value;

            }

        }

        public override int Y

        {

            get

            {

                return y;

            }

            set

            {

                this.y = value;

            }

        }

 

        public override string OutPut()

        {

            return Convert.ToString(x) + " + i" + Convert.ToString(y);

        }

        public override string ToString()

        {

            return "Complex";

        }

 

        public override bool Equals(object obj)

        {

            Complex complexObj = obj as Complex;

            if ((this.X == complexObj.X) && (this.Y == complexObj.Y))

                return true;

            else

                return false;

        }

        public int CompareTo(object obj)

        {

            Complex complexObj = obj as Complex;

            if ((this.X == complexObj.X) && (this.Y == complexObj.Y))

                return 0;

            else

                if (Math.Sqrt(Math.Pow(this.X, 2) + Math.Pow(this.Y, 2)) > Math.Sqrt(Math.Pow(complexObj.X, 2) + Math.Pow(complexObj.Y, 2)))

                    return 1;

                else

                    return -1;

        }

 

        public static Complex operator + (Complex _1, Complex _2)

        {

            return new Complex(_1.X + _2.X, _1.Y + _2.Y);

        }

        public static Complex operator * (Complex _1, Complex _2)

        {

            return new Complex(_1.X * _2.X - _1.Y * _2.Y, _1.X * _2.Y + _2.X * _1.Y);

        }

    }

}

 


Информация о работе Переопределение операций