Другие языки программирования и технологии
объясните что такое перегрузка операторов
читаю книга шилда не понял.прочитал в википедии не понял.както в уме не складуется на подсознательном уровне понимаю а так нет.даже не могу сказать что понимаю.ОБЪЯСНИТЕ ПЛЗ
Ну смотри. Все просто.
Допустим, ты создаешь свой класс. Например, такой:
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()); }
...
Если непонятно, задавай конкретные вопросы.
Допустим, ты создаешь свой класс. Например, такой:
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()); }
...
Если непонятно, задавай конкретные вопросы.
Орел путает перегрузку методов класса (override) и перезагрузку операторов (overload).
Краб с Иваном ближе к истине.
Краб с Иваном ближе к истине.
http://ru.wikipedia.org/wiki/Перегрузка_операторов
да всё понятно.. .
у тебя есть какая-то функция, которая должна обрабатывать какие-то входные данные
данные могут быть разных типов
для обработки данных разных типов ты делаешь несколько разных функций
все эти функции с одинаковым именем
а какая именно из них вызовется зависит от типа входных данных
да всё понятно.. .
у тебя есть какая-то функция, которая должна обрабатывать какие-то входные данные
данные могут быть разных типов
для обработки данных разных типов ты делаешь несколько разных функций
все эти функции с одинаковым именем
а какая именно из них вызовется зависит от типа входных данных
Доопределение операций (+, -*, / и так далее) для новых типов данных.
Перегрузка реализует один из основных принципов ООП - полиморфизм. В вашем случае это значит, что есть две функции с одинаковым названием, но разными наборами входных переменных. Транслятор или компилятор языка программирования две таких функции воспринимает по-разному, то есть можно для каждой из них написать разный код. Например, на 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.
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.
Похожие вопросы
- Перегрузка оператора в C++
- Зачем нужна перегрузка операторов? Можете написать код для большей усваимости C#
- C++ Помогите, не работает перегрузка
- Логические операторы в Python 3 - объясните на пальцах?
- С++ Пожалуйста, объясните чайнику о операторах new и delete
- C++ поразрядные операторы
- Вопрос про оператор return в С++.
- Подскажите про перегрузку/переопределение C#
- Перегрузка сложения в С++
- Сколько, примерно, операторов имеют языки программирования?