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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ задачка на сортировку http://www.cyberforum.ru/cpp-beginners/thread597844.html
есть файл input.txt. \фио \возраст \табелный иванов 30 30 петров 20 45 сидоров 20 10 перепупкин 25 15 нужно чтобы отсортировтаь список работающих по убыванию возраста, для одинакового...
C++ Какие самые крутые западные форумы про с++ ? Какие самые крутые западные форумы про с++ ? http://www.cyberforum.ru/cpp-beginners/thread597842.html
C++ Вычислите сумму квадратов всех элементов заданного массива A[N], за исключением элементов, кратных пяти.
Вычислите сумму квадратов всех элементов заданного массива A, за исключением элементов, кратных пяти.
капча C++
имеется сервис для рассылки смс как можно распознать капчу она там числовая 3х символьная http://sms.wapscriptphp.com/index.php
C++ Вводится строка каждое слово которой отделяется от других слов одним или несколькими пробелами. http://www.cyberforum.ru/cpp-beginners/thread597829.html
Вводится строка каждое слово которой отделяется от других слов одним или несколькими пробелами. Найти количество слов состоящих из пяти символов
C++ двумерный динамический массив Задан двумерный динамический массив, найти все элементы больше за среднее арифметическое в каждой строке и удалить их. Добавлено через 58 минут вот что я сделал.. только я сомневаюсь что это... подробнее

Показать сообщение отдельно
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
06.06.2012, 13:39
Перегрузка упрощает текст. Например, модуль числа может быть опеределён и для целых чисел, и для действительных и для разных разрядностей. И как быть? 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.