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

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

Войти
Регистрация
Восстановить пароль
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
#1

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

09.07.2013, 14:27. Просмотров 558. Ответов 7
Метки нет (Все метки)

захотел понять многопоточность в новом стадарте с++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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 14:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функтор и перегруженный оператор (C++):

Перегруженный оператор - C++
MathClass = Harry; Раньше я думал, что перегрузка - это предоставление оператору функций, которых, он изначально не имел. Что...

перегруженный оператор << - C++
подскажите как перегрузить оператор &lt;&lt; для класса как описать само перегружение friend ostream&amp; operator &lt;&lt; (ostream &amp;c, const...

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

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

Перегруженный оператор вывода - C++
Есть базовый класс Точка и его наследник Круг. Как в Круге использовать operator&lt;&lt; для Точки? Надо вывести координаты центра круга ...

Перегруженный постфиксный оператор ++ - C++
Есть задание: Создать класс &quot;нота&quot;: название, октава, продолжительность звучания. Производные: &quot;звук&quot; (частота) и &quot;изображение&quot;...

7
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.07.2013, 14:34 #2
Цитата Сообщение от soican Посмотреть сообщение
что означает bool operator()(int A, int B), что за 2 пары скобок?
чтобы проще было понять, возьмем перегрузку другого оператора, например operator++:
C++
1
int operator++(int);
имеем имя operator++ и в скобках параметры.
Для Вашего случая имя оператора: operator(), ну а дальше в скобках указаны параметры.
0
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 - ключевое слово? что значит перегрузка, замена чего чем?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.07.2013, 14:57 #4
Цитата Сообщение от soican Посмотреть сообщение
operator - ключевое слово?
да.
Цитата Сообщение от soican Посмотреть сообщение
что значит перегрузка, замена чего чем?
Замена поведения по умолчанию на пользовательское.
Хотите например объекты своего класса складывать используя запись A + B, вместо sum(A,B) - извольте перегрузить operator+ и т.д.
1
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. да, я туплю)
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 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 Посмотреть сообщение
да, я туплю)
книжку открой, или на крайний случай ресурс для домохозяек
1
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)
во...всё ясно теперь
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2013, 15:50
Привет! Вот еще темы с ответами:

Перегруженный оператор ввода - C++
Всем привет, как правильно создать перегруженный оператор ввода для инициализации данных об обьекте к примеру class Planet{ ...

Перегруженный оператор присваивания - C++
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю суть данного вопроса - &quot;в каком месте...

Не работает перегруженный оператор - C++
Привет, у меня есть класс такой: class Sterling { private: long pounds = 0; int shillings = 0; int pennys = 0; public:...

Не вызывается перегруженный оператор - C++
#include&lt;iostream&gt; using namespace std; struct dates { int num; int count; dates *back; dates *forward; }; class...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
09.07.2013, 15:50
Ответ Создать тему
Опции темы

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