Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2012, 17:07   #1
6666
Пользователь
 
Регистрация: 21.03.2011
Сообщений: 44
Вопрос Операции класса, индексаторы Rectangle

добрый день. делал задание в C# вот оно:

3. В класс Rectangle добавить:
a. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b, при других значениях индекса выдается сообщение об ошибке.
b. Перегрузку:
1. операции ++(--): одновременно увеличивает (уменьшает) значение полей a и b;
2. констант true и false: обращение к экземпляру класса дает значение true, если
прямоугольник с заданными длинами сторон является квадратом, иначе false;
3. операции *: одновременно домножает поля a и b на скаляр;
4. преобразования типа Rectangle в string (и наоборот).

сделал все кроме задания b 4
вот программный код:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace RectangleClass
{
    public class Rectangle
    {
        int a, b;
        //Конструкторы
        public Rectangle() 
        {
            a = b = 0;
        }
        public Rectangle(int a, int b)
        {
            this.a = a;
            this.b = b;
        }
        //Вывод значений сторон a и b (для тестирования работы класса)
        public void Show()
        {
            Console.WriteLine("a = {0}, b = {1}", this.a, this.b);
        }
        //a. Индексатор
        public int this[int index]
        {
            get
            {
                if (index == 0) return this.a;
                else if (index == 1) return this.b;
                else return -1;
            }
            set
            {
                if (index == 0) this.a = value;
                else if (index == 1) this.b = value;
            }
        }
        //b.1 Перегрузка операторов инкремента и декремента
        public static Rectangle operator ++(Rectangle ob)
        {
            ob.a++;
            ob.b++;
            return ob;
        }
        public static Rectangle operator --(Rectangle ob)
        {
            ob.a--;
            ob.b--;
            return ob;
        }
        //b.2 Перегрузка констант true и false
        public static bool operator true(Rectangle ob)
        {
            return (ob.a == ob.b) ? true : false;
        }
        public static bool operator false(Rectangle ob)
        {
            return (ob.a != ob.b) ? true : false;
        }
        //b.3 Перегрузка операторов умножения Rectangle на скаляр
        public static Rectangle operator *(Rectangle ob, int i)
        {
            ob.a *= i;
            ob.b *= i;
            return ob;
        }
        public static Rectangle operator *(int i, Rectangle ob)
        {
            return (ob * i);
        }
    }
}
подскажите как сделать b 4? заранее спс!
6666 вне форума Ответить с цитированием
Старый 07.05.2012, 17:37   #2
mrMeerkat
Следопыт
Форумчанин
 
Аватар для mrMeerkat
 
Регистрация: 26.04.2012
Сообщений: 307
По умолчанию

Код:
            public override string ToString()
            {
                return a.ToString() + ", " + b.ToString();
            }
            
            public void StrToRect(string str)
            {
                string[] q = str.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
                a = int.Parse(q[0]);
                b = int.Parse(q[1]);
            }
И для проверки
Код:
        static void Main(string[] args)
        {
            Rectangle z = new Rectangle(1, 2);
            Console.WriteLine(z.ToString());
            z.StrToRect("12, 23");
            z.Show();
            Console.ReadLine();
        }
Хотя может и красивее можно, возможно еще кто-нибудь что-нибудь предложит
С Баша:Быть ленивым, глупым, жадным, да и просто редкостным гандоном и мудаком по жизни номально, а вот если ты матом ругаешься-то это да, ужасно и достойно общественного порицания.
mrMeerkat вне форума Ответить с цитированием
Старый 07.05.2012, 18:00   #3
6666
Пользователь
 
Регистрация: 21.03.2011
Сообщений: 44
По умолчанию

спс. а как здесь будет выглядеть static void Main(string[] args) для всех методов. сейчас попытался сделать не получается. подскажите пожалуйста
6666 вне форума Ответить с цитированием
Старый 08.05.2012, 09:38   #4
mrMeerkat
Следопыт
Форумчанин
 
Аватар для mrMeerkat
 
Регистрация: 26.04.2012
Сообщений: 307
По умолчанию

примерно так(я вам внес некоторые изменения)
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            //b 4
            Rectangle x = new Rectangle(1, 2);
            Console.WriteLine(x.ToString());
            x.StrToRect("12, 23");
            x.Show();
            Console.WriteLine();
            //b 1
            x = new Rectangle();
            x.Show();
            x++;
            x.Show();
            Console.WriteLine();
            //b 3
            x *= 3;
            x.Show(); 
            Console.WriteLine();
            //a
            try
            {
                Console.WriteLine(x[0]);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            try
            {
                Console.WriteLine(x[3]);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            try
            {
                x[7] = 5;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.WriteLine();
            //b 2
            if (x)
                Console.WriteLine("квадрат");
            else
                Console.WriteLine("не квадрат");
            Console.WriteLine(new Rectangle(7, 7) ? "квадрат" : "не квадрат");
            Console.WriteLine(new Rectangle(8, 3) ? "квадрат" : "не квадрат");
            Console.ReadLine();
        }

        public class Rectangle
        {
            int a, b;
            //Конструкторы
            public Rectangle()
            {
                a = b = 0;
            }
            public Rectangle(int a, int b)
            {
                this.a = a;
                this.b = b;
            }
            //Вывод значений сторон a и b (для тестирования работы класса)
            public void Show()
            {
                Console.WriteLine("a = {0}, b = {1}", this.a, this.b);
            }
            //a. Индексатор
            public int this[int index]
            {
                get
                {
                    if (index == 0) return this.a;
                    else if (index == 1) return this.b;
                    else throw new Exception("недопустимое значение индекса");//!!!!!!!!!!!!!
                }
                set
                {
                    if (index == 0) this.a = value;
                    else if (index == 1) this.b = value;
                    else throw new Exception("недопустимое значение индекса");//!!!!!!!!!!!!!
                }
            }
            //b.1 Перегрузка операторов инкремента и декремента
            public static Rectangle operator ++(Rectangle ob)
            {
                ob.a++;
                ob.b++;
                return ob;
            }
            public static Rectangle operator --(Rectangle ob)
            {
                ob.a--;
                ob.b--;
                return ob;
            }
            //b.2 Перегрузка констант true и false
            public static bool operator true(Rectangle ob)
            {
                return (ob.a == ob.b) ? true : false;
            }
            public static bool operator false(Rectangle ob)
            {
                return (ob.a != ob.b) ? true : false;
            }
            //b.3 Перегрузка операторов умножения Rectangle на скаляр
            public static Rectangle operator *(Rectangle ob, int i)
            {
                ob.a *= i;
                ob.b *= i;
                return ob;
            }
            public static Rectangle operator *(int i, Rectangle ob)
            {
                return (ob * i);
            }

            public override string ToString()
            {
                return a.ToString() + ", " + b.ToString();
            }

            public void StrToRect(string str)
            {
                string[] q = str.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
                a = int.Parse(q[0]);
                b = int.Parse(q[1]);
            }
        }
    }
}
С Баша:Быть ленивым, глупым, жадным, да и просто редкостным гандоном и мудаком по жизни номально, а вот если ты матом ругаешься-то это да, ужасно и достойно общественного порицания.
mrMeerkat вне форума Ответить с цитированием
Старый 08.05.2012, 11:31   #5
6666
Пользователь
 
Регистрация: 21.03.2011
Сообщений: 44
По умолчанию

спасибо за помощь
6666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции и перегруженные методы класса. Necare Помощь студентам 2 01.12.2010 19:21
класс Rectangle совпадает с функцией Rectangle sofen.ru Общие вопросы C/C++ 5 06.11.2010 14:32
canvas.rectangle Terrance! Помощь студентам 3 22.09.2010 12:59
Проекция Rectangle _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 8 09.09.2010 11:13
Строки - индексаторы и свойства ArniLand Общие вопросы .NET 0 11.04.2010 16:23