Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 3

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

20.05.2018, 18:28. Показов 677. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru