Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> operator 
:(
    Опции темы
[m][a][n]
Дата 3.10.2004, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем Добрый Вечер!
Зачем он нужен, как я понимаю для перегразки операторов?
Большу ли часть роль он играет в C++?
Вобщем, если можно расскажите, зачем он нужен и если не трудно привидите коротенький пример ... перегрузки оператора ...
Зарание спасибо!
PM MAIL   Вверх
chipset
Дата 3.10.2004, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Очень важен..
Привожу пример:
У тебя есть класс вертекса и ты хочешь реализовать операцию сложения.
У тебя есть два варианта:
1. Написать функции типа Vertex Vertex::Add(Vertex &phz);
2. Перегрузить оператор "+"
Vertex Vertex::operator + (const Vertex &p)
Ясен пень что v1 = v2+v3; лучше смотрится чем v1 = v2.Add(v3);

Это сообщение отредактировал(а) chipset - 3.10.2004, 16:37


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
[m][a][n]
Дата 3.10.2004, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Понятно, а можно пример в виде кода привести?
Какой небудь простенький!
Зарание спасибо!
PM MAIL   Вверх
chipset
Дата 3.10.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Код

class Vertex
{
public:
float x;
float y;
float z;
//Координаты
Vertex operator + (const &v)
{
Vertex cpy;
cpy.x = v.x;
cpy.y = v.y;
cpy.z = v.z;
return cpy; //тут трясемся от страха как бы он не убился но я где то читал что не должен
}
Vertex(Vertex &cpy):x(cpy.x),y(cpy.y),z(cpy.z){};//copy конструктор чисто для операции =

};
void main()
{
Vertex v1,v2,v3;
v1.x = 2;
v2.x = 3;
v3 = v1+v2;
}


Примерно так..


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
[m][a][n]
Дата 3.10.2004, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Большое спасибо!
PM MAIL   Вверх
mr.DUDA
Дата 3.10.2004, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата
[a][n], 3.10.2004,  17:03]Большое спасибо

Спасибо рекомендуется выражать путём нажатия "+" справа от репутации участника wink.gif ...


--------------------
user posted image
PM MAIL WWW   Вверх
chipset
Дата 3.10.2004, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



mr.DUDA
Цитата
Сообщений: 54
smile.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
[m][a][n]
Дата 4.10.2004, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хорошо, теперь я буду щелкать по плюсикам smile.gif
Тем самым, выражая им благодарность smile.gif
Тем кто поможет мне, при ответах на следующие вопросы smile.gif

Это сообщение отредактировал(а) [m][a][n] - 4.10.2004, 18:47
PM MAIL   Вверх
Guest
Дата 5.10.2004, 12:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Или, например, можно перегрузить оператор == для строк ...
bool operator==(char *str1, char *str2); smile.gif
  Вверх
[m][a][n]
Дата 6.10.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ясно
PM MAIL   Вверх
AntonSaburov
Дата 7.10.2004, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(chipset @ 3.10.2004, 17:34)
Ясен пень что v1 = v2+v3; лучше смотрится чем v1 = v2.Add(v3);

Я бы отметил, что еще более важна возможность перегрузки операторов в случаях использования template (как пример можно посмотреть STL - standard template library).

Основная идея теплейтов в том, что в них определяется что-то вроде каркаса, без учета типа данных. Тот же Vector, List, Map могут быть использованы для хранения любых типов данных. Также для таких данных используются всевозможные алгоритмы - сортировка, поиск и прочая.
И сразу возникает вопрос - а как, например, можно отсортировать данные не используя оператор сравнения. На основе сравнения сортировка и происходит. И вот тут и вступают перегруженные операторы. Если мой алгоритм использует операторы "+", "<", ">" "==" и прочая, то для какого-то экстравагантного типа данных я могу и определить и использовать стандартные алгоритмы не изобретая велосипед.
PM MAIL WWW ICQ   Вверх
DENNN
Дата 8.10.2004, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



AntonSaburov
по поводу сравнения, там вообще-то для сложных типов данных предикаты в шаблон передаются.

Это сообщение отредактировал(а) DENNN - 8.10.2004, 09:22
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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