Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с перегрузкой операторов 
:(
    Опции темы
phenix79
Дата 31.1.2012, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 19.12.2011

Репутация: нет
Всего: нет



Помогите пожалуйста разобраться , я изучаю C# не давно, читаю книгу Шилдта, но там не совсем доходчиво написано о перегрузке операторов.
Как в данном коде происходит перегрузка операторв +?
Как я понял он складывает поля x, y для каждого отдельного объекта.
Мы инициализируем объекты a и b 
Код

Vector a = new Vector(1, 2), b = new Vector(3, 4)

А в аргументах перегрузки оператора совсем другие объекты
Код

Vector w, Vector v

И он в методе работает именно с ними и складывает их ,но почему изменяются объекты a и b???
Потом не понятно в какой момент вызывается метод-оператор+??
Когда срабатывает конструктор или в другой момент?
Когда мы передаем ему в качестве аргуметов параметры??
В общем ничего не понятно...объясните пожалуйста по полочкам, как все происходит, спасибо заранее всем!!!

Код

using System;
namespace test
{
    class Vector
    {
       public float x, y; //Координаты
        //Конструктор
        public Vector(float x, float y)
        {
            this.x = x;
            this.y = y;
        }
       
        //Перегрузка оператора +
        public static Vector operator +(Vector w, Vector v)
        {
            Vector res = new Vector(w.x + v.x, w.y + v.y);
            return res;
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            Vector a = new Vector(1, 2), b = new Vector(3, 4), c;
            c = a + b;
            Console.WriteLine("x=" + c.x + ", " + "y=" + c.y);
        }
    }
}


Это сообщение отредактировал(а) phenix79 - 31.1.2012, 09:36
PM MAIL   Вверх
Экскалупатор
Дата 31.1.2012, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



ммм, типа буквы другие? создаются a и b, а работают с w и v? такие вопросы печалят меня очень сильно... я думаю про перегрузки с таким подходом читать еще оооочень рано. почитай про(в моей книжке Шилдта так) " ГЛАВА 3. Типы данных, литералы и переменные", а потом "Глава 6. Введение в классы, объекты и методы", а потом еще "Глава 8. Подробнее о методах и классах". если будет не понятно про "другие буквы" то нужно будет перечитать еще раз.
PM MAIL ICQ   Вверх
phenix79
Дата 31.1.2012, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 19.12.2011

Репутация: нет
Всего: нет



Спасибо за совет,но я уже про это все прочитал, вот добрался до перегрузки операторов, а как это работает не понятно...
Я понимаю что имена аргуметов в методе могут отличаться, это все понятно, самое главное чтобы тип совпадал.
Мне не понятно в какой момент вызывается вот это
Код

 //Перегрузка оператора +
        public static Vector operator +(Vector w, Vector v)
        {
            Vector res = new Vector(w.x + v.x, w.y + v.y);
            return res;
        }

и потом возвращаемое значение "res" куда передается??????
Кто нибудь может своими словами объяснить как работает вышеупомянутый код??
Спсибо заранее

Это сообщение отредактировал(а) phenix79 - 31.1.2012, 10:36
PM MAIL   Вверх
Экскалупатор
Дата 31.1.2012, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата

Спасибо за совет,но я уже про это все прочитал, вот добрался до перегрузки операторов, а как это работает не понятно...

я понимаю что прочитал, потому что перегрузка находится позже всех этих методов, но видно плохо понял, а по сему следовало бы повторить.


Код

c = a + b;

res возвращается в с.


PM MAIL ICQ   Вверх
phenix79
Дата 31.1.2012, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 19.12.2011

Репутация: нет
Всего: нет



Цитата(Экскалупатор @ 31.1.2012,  12:24)
Цитата

Спасибо за совет,но я уже про это все прочитал, вот добрался до перегрузки операторов, а как это работает не понятно...

я понимаю что прочитал, потому что перегрузка находится позже всех этих методов, но видно плохо понял, а по сему следовало бы повторить.


Код

c = a + b;

res возвращается в с.

Спасибо большое теперь стало более менее понятным,что в  объект С мы получаем результат сложения  полей объектов a и b

И ещё вопрос, а в качестве оргументов Vector w, Vector v в операторе, мы передаём объекты a и b????Я ведь правилньо понял??
 
Код

public static Vector operator +(Vector w, Vector v)<--Сюда передаются объекты Vector a и Vector b?



Это сообщение отредактировал(а) phenix79 - 31.1.2012, 12:57
PM MAIL   Вверх
Экскалупатор
Дата 31.1.2012, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(phenix79 @  31.1.2012,  11:43 Найти цитируемый пост)
Я ведь правилньо понял??

 smile 


p.s. учи матчасть  smile 



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1007 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.