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

Функтор и перегруженный оператор - C++

Восстановить пароль Регистрация
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
09.07.2013, 14:27     Функтор и перегруженный оператор #1
захотел понять многопоточность в новом стадарте с++11 - смотрю http://sergeyteplyakov.blogspot.ru/2...ml#std-threads - вижу "стандартная функция bind по сути создает функтор из переданных аргументов." - смотрю про функтор http://ru.wikipedia.org/wiki/%D0%A4%...D%D0%B8%D0%B5) - далее перехожу на "Перегрузка операторов" и приехали.
На этом простом примере - что означает bool operator()(int A, int B), что за 2 пары скобок?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class compare_class {
  public:
  bool operator()(int A, int B) 
   {  return (A < B);  }
};
// объявление функции сортировки
template <class ComparisonFunctor> 
void sort_ints(int* begin_items, int num_items, ComparisonFunctor c);
int main() 
{   int items[] = {4, 3, 1, 2};
    compare_class functor;
    sort_ints(items, sizeof(items)/sizeof(int), functor);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 14:27     Функтор и перегруженный оператор
Посмотрите здесь:

C++ Не вызывается перегруженный оператор
C++ Функции и перегруженный оператор
Перегруженный оператор ввода C++
C++ Перегруженный оператор вывода
Перегруженный оператор присваивания C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.07.2013, 14:34     Функтор и перегруженный оператор #2
Цитата Сообщение от soican Посмотреть сообщение
что означает bool operator()(int A, int B), что за 2 пары скобок?
чтобы проще было понять, возьмем перегрузку другого оператора, например operator++:
C++
1
int operator++(int);
имеем имя operator++ и в скобках параметры.
Для Вашего случая имя оператора: operator(), ну а дальше в скобках указаны параметры.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
09.07.2013, 14:42  [ТС]     Функтор и перегруженный оператор #3
Цитата Сообщение от Tulosba Посмотреть сообщение
чтобы проще было понять, возьмем перегрузку другого оператора, например operator++:
не совсем понял, что после этого произошло. Я понимаю была бы функция operator
C++
1
2
bool operator(int A, int B) 
   {  return (A < B);  }
или operator - ключевое слово? что значит перегрузка, замена чего чем?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.07.2013, 14:57     Функтор и перегруженный оператор #4
Цитата Сообщение от soican Посмотреть сообщение
operator - ключевое слово?
да.
Цитата Сообщение от soican Посмотреть сообщение
что значит перегрузка, замена чего чем?
Замена поведения по умолчанию на пользовательское.
Хотите например объекты своего класса складывать используя запись A + B, вместо sum(A,B) - извольте перегрузить operator+ и т.д.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
09.07.2013, 15:15  [ТС]     Функтор и перегруженный оператор #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Замена поведения по умолчанию на пользовательское.
хорошо, тогда запись
C++
1
 bool operator()(int A, int B)
перегружает оператор "()" на (int A, int B)? и как это понять? а зачем тогда { return (A < B); } и вообще зачем тогда bool
P.S. да, я туплю)
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.07.2013, 15:45     Функтор и перегруженный оператор #6
Цитата Сообщение от soican Посмотреть сообщение
перегружает оператор "()" на (int A, int B)?
да
Цитата Сообщение от soican Посмотреть сообщение
и как это понять?
объект можно использовать как функцию:
C++
1
2
compare_class obj;
obj(10, 20); // вызов  bool compare_class::operator()(int A, int B)

Не по теме:

Цитата Сообщение от soican Посмотреть сообщение
а зачем тогда { return (A < B); } и вообще зачем тогда bool
ну поди создай свой язык с преферансом и поэтессами без всякой херни. что за вопросы!?



Добавлено через 4 минуты
Цитата Сообщение от soican Посмотреть сообщение
да, я туплю)
книжку открой, или на крайний случай ресурс для домохозяек
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
09.07.2013, 15:48  [ТС]     Функтор и перегруженный оператор #7
Цитата Сообщение от Jupiter Посмотреть сообщение
объект можно использовать как функцию:
C++
1
2
compare_class obj;
obj(10, 20); // вызов *bool compare_class::operator()(int A, int B)
во...всё ясно теперь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2013, 15:50     Функтор и перегруженный оператор
Еще ссылки по теме:

C++ Перегруженный оператор вывода
Перегруженный постфиксный оператор ++ C++
Глобальный перегруженный оператор C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.07.2013, 15:50     Функтор и перегруженный оператор #8
Цитата Сообщение от soican Посмотреть сообщение
перегружает оператор "()" на (int A, int B)? и как это понять?
понять это так:
C++
1
2
3
4
5
MyClass c;
if( c( 2, 3 ) ) // здесь вызовется MyClass::operator()(2,3)
{
 // попадаем сюда, когда operator() вернул true
}
Yandex
Объявления
09.07.2013, 15:50     Функтор и перегруженный оператор
Ответ Создать тему
Опции темы

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