Другие языки программирования и технологии

объясните что такое перегрузка операторов

читаю книга шилда не понял.прочитал в википедии не понял.както в уме не складуется на подсознательном уровне понимаю а так нет.даже не могу сказать что понимаю.ОБЪЯСНИТЕ ПЛЗ
Ну смотри. Все просто.

Допустим, ты создаешь свой класс. Например, такой:

class my_integer
{
public:
my_integer(int x) { i = x; }

int value()const { return i; }
void setValue(int x) { i = c; }

private:
int i;
};

Если тебе нужно сложить два объекта, то можно, конечно, писать так:

c.setValue(a.value() + b.value());

Но так длинно, и не наглядно. Идеально сделать так:

c = a + b;

Но компилятор не знает, как правильно работать с твоим типом. Поэтому ты указываешь, что нужно делать, когда ты применяешь оператор сложение. Это определение действий компилятора и есть перегрузка оператора. Ты можешь написать:

...
my_integer operator+(const my_integer& i1) { return my_integer(value() + i1.value()); }
...

Если непонятно, задавай конкретные вопросы.
Раиль Павлявиевич
Раиль Павлявиевич
4 300
Лучший ответ
Орел путает перегрузку методов класса (override) и перезагрузку операторов (overload).
Краб с Иваном ближе к истине.
http://ru.wikipedia.org/wiki/Перегрузка_операторов

да всё понятно.. .

у тебя есть какая-то функция, которая должна обрабатывать какие-то входные данные

данные могут быть разных типов

для обработки данных разных типов ты делаешь несколько разных функций

все эти функции с одинаковым именем

а какая именно из них вызовется зависит от типа входных данных
Николай Негру
Николай Негру
90 266
Доопределение операций (+, -*, / и так далее) для новых типов данных.
Перегрузка реализует один из основных принципов ООП - полиморфизм. В вашем случае это значит, что есть две функции с одинаковым названием, но разными наборами входных переменных. Транслятор или компилятор языка программирования две таких функции воспринимает по-разному, то есть можно для каждой из них написать разный код. Например, на C#:
double sum(double a, double b)
{
double result;
result = a + b ;
return result;
}

int sum(int a, int b)
{
int result;
result = a + b;
return result;
}

В этом случае вызов sum (1, 1) выполнит вторую функцию и выдаст 2, а вызов sum(1.5, 2.5) выполнит первую функцию и выдаст 4.
ЛЮ
Леша Ющик
3 728