Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ioane
56 / 56 / 23
Регистрация: 19.02.2012
Сообщений: 250
#1

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

06.06.2012, 12:33. Просмотров 1268. Ответов 6
Метки нет (Все метки)

Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 12:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка в c++ (C++):

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...

перегрузка - C++
1 С помощью механизма перегрузки функций реализовать функции для нахождения суммы: 1) двух чисел (результат – число); 2) двух строк...

Перегрузка [][] - C++
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: ...

перегрузка [] - C++
Есть класс, и почему компилятор выдает ошибку на функции int &operator(int); #ifndef ARRAY1_H #define ARRAY1_H #include...

6
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 12:35 #2
Низачем не нужно. Просто так удобнее.
0
antoha398
156 / 156 / 3
Регистрация: 29.03.2012
Сообщений: 418
06.06.2012, 13:10 #3
перегрузка функций упрощает разработку программы и делает код понятней.
перегрузка оператор позволяет создавать версии операторов для собственных классов, что является незаменимым инструментом при проектиовании большинства классов
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
06.06.2012, 13:39 #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; // Просто, понятно, читабельно, мала вероятность ошибок
.
1
David Sylva
1293 / 955 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
06.06.2012, 13:56 #5
Принципиальный выигрыш от перегрузки операторов состоит в том, что она позволяет ограниченно интегрировать новые типы данных в среду программирования.(Гербер Шилдт)

Перегрузка операций даёт возможность переопределить язык С++( Р.Лафоре).
0
eleonorк
0 / 0 / 0
Регистрация: 11.09.2012
Сообщений: 1
14.09.2012, 14:21 #6
Гляньте эту заметку. Здесь расказано, зачем нужна перегрузка операторов в С++ и приведен пример
0
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
15.09.2012, 14:56 #7
ioane, достаточно сказать, что перегрузка функций - одна из форм статического полиморфизма (полиморфизм - потому что имеем один интерфейс, который в зависимости от контекста может отрабатывать по-разному, статический - потому что выбор необходимой реализации происходит на стадии компиляции, а не выполнения, как с динамическим полиморфизмом).
P.S. Почему то народ ухватился за перегрузку операторов, а мне кажется, что речь всё же о перегрузке функций/методов.
0
15.09.2012, 14:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 14:56
Привет! Вот еще темы с ответами:

Перегрузка +,-,++,-- - C++
Задание примерно такое: Создать класс линейного списка List. С помощью перегруженных операций реализовать: 1) переместиться в...

перегрузка [] - C++
Здравствуйте! код из учебного пособия. (возможно немного не рабочий) текст перед кодом- "Пусть класс определен как строка символов....

перегрузка - C++
а чем отличаются перегрузка как метод и как функция?

Перегрузка в c++ - C++
Собственно для чего нужна перегрузка функций или операторов ?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru