Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > operator


Автор: [m][a][n] 3.10.2004, 16:26
Всем Добрый Вечер!
Зачем он нужен, как я понимаю для перегразки операторов?
Большу ли часть роль он играет в C++?
Вобщем, если можно расскажите, зачем он нужен и если не трудно привидите коротенький пример ... перегрузки оператора ...
Зарание спасибо!

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

Автор: [m][a][n] 3.10.2004, 16:39
Понятно, а можно пример в виде кода привести?
Какой небудь простенький!
Зарание спасибо!

Автор: chipset 3.10.2004, 17:00
Код

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;
}


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

Автор: [m][a][n] 3.10.2004, 17:03
Большое спасибо!

Автор: mr.DUDA 3.10.2004, 21:12
Цитата
[a][n], 3.10.2004,  17:03]Большое спасибо

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

Автор: chipset 3.10.2004, 22:57
mr.DUDA
Цитата
Сообщений: 54
smile.gif

Автор: [m][a][n] 4.10.2004, 18:44
Хорошо, теперь я буду щелкать по плюсикам smile.gif
Тем самым, выражая им благодарность smile.gif
Тем кто поможет мне, при ответах на следующие вопросы smile.gif

Автор: Guest 5.10.2004, 12:21
Или, например, можно перегрузить оператор == для строк ...
bool operator==(char *str1, char *str2); smile.gif

Автор: [m][a][n] 6.10.2004, 14:39
Ясно

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

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

Основная идея теплейтов в том, что в них определяется что-то вроде каркаса, без учета типа данных. Тот же Vector, List, Map могут быть использованы для хранения любых типов данных. Также для таких данных используются всевозможные алгоритмы - сортировка, поиск и прочая.
И сразу возникает вопрос - а как, например, можно отсортировать данные не используя оператор сравнения. На основе сравнения сортировка и происходит. И вот тут и вступают перегруженные операторы. Если мой алгоритм использует операторы "+", "<", ">" "==" и прочая, то для какого-то экстравагантного типа данных я могу и определить и использовать стандартные алгоритмы не изобретая велосипед.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)