Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для 6666
54 / 54 / 11
Регистрация: 02.05.2010
Сообщений: 294

В класс Rectangle добавить индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b

07.05.2012, 07:35. Показов 3886. Ответов 6
Метки нет (Все метки)

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

Добавлено через 20 часов 27 минут
кто нибудь???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2012, 07:35
Ответы с готовыми решениями:

В класс Money добавить индексатор, позволяющий по индексу 0 обращаться к полю first
В класс Money добавить: a. Индексатор, позволяющий по индексу 0 обращаться к полю first, по индексу 1 – к полю second, при других...

Создать индексатор, позволяющий по индексу 0 обращаться к полю R, по индексу 1 — к полю text
Стоит задача: создать "индексатор, позволяющий по индексу 0 обращаться к полю R, по индексу 1 - к полю text" Но! R - Regex, text -...

Как обращаться к своему классу по индексу?
Люди помогите пожалуйста :cry: как мне сделать чтоб бы можно было в параметры моего нового контрола вбивать сразу для удобства несколько...

6
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
07.05.2012, 08:27
В класс Rectangle добавить:
a. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b, при других значениях индекса выдается сообщение об ошибке.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Rectangle
{
    int a;
    int b;
 
    public int this[int i] {
        set {
            switch (i) {
                case 0:
                    this.a = value;
                    break;
                case 1:
                    this.b = value;
                    break;
                default:
                    throw new IndexOutOfRangeException();
            }
        }
        get {
            switch (i) {
                case 0:
                    return this.a;
                case 1:
                    return this.b;
                default:
                    throw new IndexOutOfRangeException();
        }
    }
}
1
 Аватар для 6666
54 / 54 / 11
Регистрация: 02.05.2010
Сообщений: 294
07.05.2012, 11:37  [ТС]
подскажите как сделать остальное:
b. Перегрузку:
• операции ++ (--): одновременно увеличивает (уменьшает) значение полей a и b;
• констант true и false: обращение к экземпляру класса дает значение true, если прямоугольник с заданными длинами сторон является квадратом, иначе false;
• операции *: одновременно домножает поля a и b на скаляр;
• преобразования типа Rectangle в string (и наоборот).
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 12:15
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public static Rectangle operator ++(Rectangle rectangle)
{
    return new Rectangle {a = rectangle.a + 1, b = rectangle.b + 1};
}
 
public static Rectangle operator --(Rectangle rectangle)
{
    return new Rectangle {a = rectangle.a - 1, b = rectangle.b - 1};
}
 
public static explicit operator bool(Rectangle rectangle)
{
    return rectangle.a == rectangle.b;
}
 
public static Rectangle operator *(Rectangle rectangle, int value)
{
    return new Rectangle {a = rectangle.a * value, b = rectangle.b * value};
}
 
public static Rectangle operator *(int value, Rectangle rectangle)
{
    return rectangle * value;
}
 
public static implicit operator string(Rectangle rectangle)
{
    return string.Format("a = {0}, b = {1}", rectangle.a, rectangle.b);
}
 
public static explicit operator Rectangle(string value)
{
    var match = Regex.Match(value, @"a = (\d), b = (\d)");
    if (!match.Success)
        throw new ArgumentException();
    return new Rectangle {a = int.Parse(match.Groups[1].Value), b = int.Parse(match.Groups[2].Value)};
}
1
 Аватар для 6666
54 / 54 / 11
Регистрация: 02.05.2010
Сообщений: 294
07.05.2012, 15:12  [ТС]
Может я сейчас задам один из глупейших вопросов, но как совместить эти два кода в один. попытался выдает ошибки
0
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 52
07.05.2012, 18:08
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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);
        }
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) для всех методов??и как его вставить в программный код???
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
07.05.2012, 19:08
Цитата Сообщение от miki Посмотреть сообщение
теперь подскажите как здесь будет выглядеть static void Main(string[] args) для всех методов??и как его вставить в программный код???
Впишите его в конец класса, а в нём тестируйте что хотите:
C#
1
2
3
4
5
6
internal static void Main() {
    Rectangle r1 = new Rectangle(10, 20);
    // или другие операторы
    Console.WriteLine(r1 * 5);
    Console.WriteLine(r1[1]);
}
И ещё. Зачем вам метод Show? Всё можно увидеть, воспользовавшись ToString. К тому же Console.WriteLine() и отладчик VS автоматически используют ToString() для показа содержимого экземпляра класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2012, 19:08
Помогаю со студенческими работами здесь

Инициализатор поля не может обращаться к нестатическому полю
Код класса class massive { int m, n; public int M { get { return m; } ...

Инициализатор поля не может обращаться к нестатическому полю
Ошибка 1 Инициализатор поля не может обращаться к нестатическому полю, методу или свойству "ConsoleApplication1.GlobalP.rand" Вот...

Инициализатор поля не может обращаться к нестатическому полю
Привет всем! При инициализации нового поля в классе приходится обращаться к уже существующему полю(инициализированную конструктором)...

Инициализатор поля не может обращаться к нестатическому полю
Для инициализации некоторого редактора есть такая строчка Scintilla scintilla1 = (Scintilla)wfh.Child; Находясь в public MainWindow()...

Обратиться к полю таблицы по индексу
Доброго времени суток всем. Что-то заклинило. Гугл подсказал как получить список таблиц базы и как получить список полей таблицы. А мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru