0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 3

Перегрузка оператора +

20.05.2018, 18:28. Показов 716. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет форумчане!

Имеется следующий класс:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
    public sealed class Point
        {
            private int x = 1;
            private int y = 2;
            private int z = 3;
            public string str;
 
            public static Point operator +(Point pnt1, Point pnt2)
            {
                Point result = new Point();
 
                result.x = pnt1.x + pnt2.x;
                result.y = pnt1.y + pnt2.y;
                result.z = pnt1.z + pnt2.z;
 
                return result;
            }
        }
Выполнив следующий код, мы затрём поле str в объекте pnt1:

C#
1
2
3
4
5
6
 
Point pnt1= new Point (); 
pnt1.str = "AZAZA!"; 
Point pnt2= new Point (); 
 
pnt1= pnt1+ pnt2;
Вопрос: можно ли избежать такой проблемы именно в контексте перегрузки оператора?

Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2018, 18:28
Ответы с готовыми решениями:

Перегрузка оператора >
хочу перегрузить оператор >, но не получается ... вот часть кода: public train Error = new train(); public vokzal Obj = new vokzal();...

Перегрузка оператора +
Есть три класса: HallValue, FilmValue, Session. В HallValue есть поле Start (в нем время начала сеанса "00:00"). В FilmValue есть...

Перегрузка оператора
public Set operator < (Set ob1, Set ob2) { if(ob1.len > ob2.len) return false; //если множество ob1 содержит больше...

9
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.05.2018, 18:33
А в чем проблема то? В том, что вы создаете новый объект и не инициализируете str?

C#
1
2
3
4
5
6
7
                Point result = new Point();
 
                result.x = pnt1.x + pnt2.x;
                result.y = pnt1.y + pnt2.y;
                result.z = pnt1.z + pnt2.z;
 
                return result;
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 3
20.05.2018, 18:40  [ТС]
Woldemar89,

нет. Проблема в том, что нужно просуммировать координаты, и не трогать поле str
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.05.2018, 18:47
C#
1
2
3
4
5
6
7
8
9
                Point result = new Point(); //это новый объект!!!                
                
                result.x = pnt1.x + pnt2.x;
                result.y = pnt1.y + pnt2.y;
                result.z = pnt1.z + pnt2.z;
 
                result.str = pnt1.str; //и нужно просто инициализировать его поле соотв. значением
 
                return result;
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 3
20.05.2018, 22:15  [ТС]
Woldemar89,

спасибо, я это понимаю Проблема в том, что мы можем и не знать во время выполнения, какой объект окажется по левую сторону присваивания (зависит от реализации). Отсюда и вытекает вопрос - как дать понять среде выполнения, что объекту слева (pnt1), при присвоении ему нового объекта (result), нужно заресетить только определенные поля (координаты)?

Пока концепция у меня только одна - скопировать в result объект pnt1, заресетить координаты у result и присвоить result объекту pnt1. Но как это делается в перегрузке оператора (не зная, какой объект по левую сторону присваивания), не хватает опыта придумать

В общем, жду наставлений на путь истинный.
Спасибо)
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
20.05.2018, 22:20
ну так продумай, как должно произойти при
1. у всех это поле пустое
2. только у какого-то одного заполнено
3. у обоих заполнено
0
5 / 5 / 5
Регистрация: 28.01.2017
Сообщений: 30
20.05.2018, 23:16
Цитата Сообщение от Just_Calm Посмотреть сообщение
Выполнив следующий код, мы затрём поле str в объекте pnt1:
Избежать затирания поможет "отличный" интерфейс IClonable который ты должен реализовать в классе Point, методом Clone() и выполнив return this.MemberwiseClone() . Затираться ничего не будет т.к мы режем риференс . А далее делай что хочешь и суммируй только координаты.
0
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 58
21.05.2018, 02:52
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static Point operator +(Point pnt1, Point pnt2)
            {
                if(pnt2==null&&pnt1!=null)
               {
                Point result = new Point();
 
                result.x = pnt1.x + pnt2.x;
                result.y = pnt1.y + pnt2.y;
                result.z = pnt1.z + pnt2.z;
                result.str=pnt1.str;
                return result;
                }
                 else
                {
                  return pnt2+pnt1;
                }
            }
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
21.05.2018, 05:00
Цитата Сообщение от Just_Calm Посмотреть сообщение
Проблема в том, что мы можем и не знать во время выполнения, какой объект окажется по левую сторону присваивания (зависит от реализации). Отсюда и вытекает вопрос - как дать понять среде выполнения, что объекту слева (pnt1), при присвоении ему нового объекта (result), нужно заресетить только определенные поля (координаты)?
В реализации перегруженного оператора этого сделать не получится, при его использовании переменной слева от знака равенства присваивается вновь созданный объект, возвращаемый оператором, со своим полем str. Метод оператора знать не знает, чему присваивается возвращаемый им результат.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
21.05.2018, 07:52
Цитата Сообщение от Just_Calm Посмотреть сообщение
В общем, жду наставлений на путь истинный.
Учите язык.
Цитата Сообщение от Just_Calm Посмотреть сообщение
при присвоении ему нового объекта
??
https://metanit.com/sharp/tutorial/2.16.php
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2018, 07:52
Помогаю со студенческими работами здесь

Перегрузка оператора
Здравствуйте. У меня проблема, не могу сделать перегрузку оператора "!", надо подсчитать факториал числа. class Factorial { ...

Перегрузка оператора %
Здравствуйте! Уже задавала похожий вопрос. Как переопределить оператор %, для нахождения процента чисел. Причем оба объекта должны быть...

Перегрузка оператора <<
Здравствуйте, форумчане. Нужно в классе перегрузить оператор &lt;&lt;. Так не получается. В чем проблема? public void operator&lt;&lt; (int...

Перегрузка оператора
Здравствуйте! Есть класс Fraction(дробь), хочу перегрузить оператор + для массива таких дробей... Внутри класса объявляю: public...

Перегрузка оператора ==
Вот код:public static bool operator ==(Tree LeftTree, Tree RightTree) { if (LeftTree== null &amp;&amp; RightTree== null) ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru