Форум программистов, компьютерный форум CyberForum.ru

Перегрузка в c++ - C++

Восстановить пароль Регистрация
 
ioane
49 / 49 / 22
Регистрация: 19.02.2012
Сообщений: 225
06.06.2012, 12:33     Перегрузка в c++ #1
Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 12:33     Перегрузка в c++
Посмотрите здесь:

[C++] перегрузка + C++
C++ Перегрузка
C++ Перегрузка
перегрузка в с++ C++
Перегрузка + C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 12:35     Перегрузка в c++ #2
Низачем не нужно. Просто так удобнее.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 13:10     Перегрузка в c++ #3
перегрузка функций упрощает разработку программы и делает код понятней.
перегрузка оператор позволяет создавать версии операторов для собственных классов, что является незаменимым инструментом при проектиовании большинства классов
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.06.2012, 13:39     Перегрузка в c++ #4
Перегрузка упрощает текст. Например, модуль числа может быть опеределён и для целых чисел, и для действительных и для разных разрядностей. И как быть? shabs, smabs, labs, fabs, dabs? Но семантически это одна функция, только для разных типов данных. И чтоб каждый раз не гадать, какая функция нужна для каких данных, лучше подойдёт одна abs. Но без перегрузки у неё только один вариант типов самой функции и параметра. Приводить тип к double, а потом назад? Это лишние операции, да и вещественные операции медленнее целых, а если приводить всё к целым, то у вещественных будет потеря точности. Вот для этого и нужна перегрузка. И ладно ещё числа друг к другу хоть приводятся. А если вектор (математический)? Вектор вообще не приводится к числу, а число к вектору. Или сортировка массивов с разными базовыми типами. Хотя, в принципе, именно эти задачи решаются шаблонами, так как под одним именем функции один алгоритм. Но шаблон - всего лишь автоматическая перегрузка по единому образцу с сохранением алгоритма. И по сути частный случай перегрузки. Но может быть и так, что алгоритм не совпадает. Например, сортировка дерева и односвязного списка с копанием в их внутренностях различается алгоритмически. Через итераторы не различается, а с копанием во внутренностях различается. А сама операция при этом семантически не меняется. Тогда придётся перегружать вручную. Или функция-друг det вычисления определителя матрицы для двух-трёх разных внутренних представлений данных матрицы. Перегрузка операторов решает ту же задачу упрощения исходного текста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class TVector
{
 public:
  float x,y,z;
};
...
TVector add(TVector a, TVector b)
{
 TVector r;
 r.x=a.x+b.x;
 r.y=a.y+b.y;
 r.z=a.z+b.z;
 return r;
};
...
TVector a,b,c, d;
/*надо вычислить d=a+b+c*/
/*Вариант 1*/
d=add(a,b);
a=add(d,c);
/*Косо до безобразия*/
/*Вариант 2*/
d=add(a,add(b,c));
/*Косо до безобразия*/
/*Вариант 3*/
d=add(add(a,b),c);
/*Косо до безобразия*/
. А если не 3 вектора, а больше?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class TVector
{
 public:
  float x,y,z;
  TVector operator + (TVector b);
};
TVector TVector:: operator + (TVector b)
{
 TVector r;
 r.x=a.x+b.x;
 r.y=a.y+b.y;
 r.z=a.z+b.z;
 return r;
}
...
TVector a,b,c, d;
/*надо вычислить d=a+b+c*/
d=a+b+c; // Просто, понятно, читабельно, мала вероятность ошибок
.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
06.06.2012, 13:56     Перегрузка в c++ #5
Принципиальный выигрыш от перегрузки операторов состоит в том, что она позволяет ограниченно интегрировать новые типы данных в среду программирования.(Гербер Шилдт)

Перегрузка операций даёт возможность переопределить язык С++( Р.Лафоре).
eleonorк
Сообщений: n/a
14.09.2012, 14:21     Перегрузка в c++ #6
Гляньте эту заметку. Здесь расказано, зачем нужна перегрузка операторов в С++ и приведен пример
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 14:56     Перегрузка в c++
Еще ссылки по теме:

Перегрузка в c++ C++
C++ Перегрузка ++ и --
Перегрузка +,-,++,-- C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.09.2012, 14:56     Перегрузка в c++ #7
ioane, достаточно сказать, что перегрузка функций - одна из форм статического полиморфизма (полиморфизм - потому что имеем один интерфейс, который в зависимости от контекста может отрабатывать по-разному, статический - потому что выбор необходимой реализации происходит на стадии компиляции, а не выполнения, как с динамическим полиморфизмом).
P.S. Почему то народ ухватился за перегрузку операторов, а мне кажется, что речь всё же о перегрузке функций/методов.
Yandex
Объявления
15.09.2012, 14:56     Перегрузка в c++
Ответ Создать тему
Опции темы

Текущее время: 21:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru