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

operator() - C++

Восстановить пароль Регистрация
 
Stason676
Заблокирован
20.01.2014, 19:09     operator() #1
Здраваствуйте. Объясните пожалуйста смысл "opereator()" во всех случаях, что он делает, почему иногда впереди него ставится "&" "&operator()" и почему "opereator()" используется в функторах. Если можно по потробней или ссылку на полную информацию. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 19:09     operator()
Посмотрите здесь:

C++ operator
operator< C++
C++ operator[]
Operator>> C++
operator char() или operator int() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
20.01.2014, 19:17     operator() #2
Цитата Сообщение от Stason676 Посмотреть сообщение
почему иногда впереди него ставится "&" "&operator()
смотря что нужно вернуть
Цитата Сообщение от Stason676 Посмотреть сообщение
и почему "opereator()" используется в функторах.
потому что можно делать так:
C++
1
2
type obj ;
obj() ; //<-- похоже на вызов функции? Отсюда и название функциональных объектов
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
20.01.2014, 19:33     operator() #3
Я советую к прочтению сей мануал
Stason676
Заблокирован
20.01.2014, 22:43  [ТС]     operator() #4
спасибо за ответы, вопрос такой, если функция operator() находится в классе, то при использование объекта этого класса он как бы вызывается как функция? есть статья как и по каким правилам происходит анализ исходных текстов в си++? Спасибо.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
21.01.2014, 01:03     operator() #5
Цитата Сообщение от Stason676 Посмотреть сообщение
спасибо за ответы, вопрос такой, если функция operator() находится в классе, то при использование объекта этого класса он как бы вызывается как функция? есть статья как и по каким правилам происходит анализ исходных текстов в си++? Спасибо.
Допустим у нас есть структура для сравнения строк
C++
1
2
3
4
5
6
7
struct Comp 
{ 
    bool operator()(const std::string &s1, const std::string &s2) const 
    { 
        return s1.length() < s2.length(); 
    } 
};
Так как для неё определен оператор (), то вызов ниже
C++
1
2
3
4
5
int main()
{
    const std::string s1 = "eniki beniki", s2 = "eli vareniki";
    std::cout << std::boolalpha << Comp()(s1,s2);
}
будет на самом деле рассмотрен как
C++
1
Comp().operator()(s1,s2);
то есть будет вызван конструктор по умолчанию и потом operator() с передачей ему двух строк в качестве аргументов. То же самое можно было бы задать так:
C++
1
2
Comp cmp;
std::cout << std::boolalpha << cmp(s1,s2);
Можете почитать Л.Аммерааль - STL для программистов на C++.
Yandex
Объявления
21.01.2014, 01:03     operator()
Ответ Создать тему
Опции темы

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