2012-06-09 4 views
-1

Я пытаюсь понять перегрузку оператора на C++ и может видеть полезность при использовании с осторожностью на таких операторах, как + и []. Сейчас меня интересует перегрузка(). Boost, похоже, использует его со своими статистическими классами, и я могу их использовать, но не понимаю, что я делаю.() Пример перегрузки оператора

Может ли кто-нибудь представить простой пример того, когда перегрузка оператора() была бы полезна? Спасибо, ребята Pete

+0

Это ключевая часть 'станд :: function', чтобы вызвать содержащийся как обычно. – chris

+8

Термин, который вы, вероятно, хотите найти, это «Functor». –

+0

Я сделал поиск Google, но примеры, которые я нашел, очень сфокусированы на других операторах. – Pete855217

ответ

0

Обычное использование перегрузки оператора() для функциональных объектов или functors. Вы можете использовать объекты класса, который определяет оператор() и использовать так, как будто это функция, как показано в примере ниже:

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 

class multiply 
{ 
private: 
    int x; 
public: 
    multiply(int value):x(value) { } 
    int operator()(int y) { return x * y; } 
    int getValue() { return x; } 
}; 

int main() 
{ 
    multiply m(10); //create an object 
    cout << "old value is " << m.getValue() << endl; 
    int newValue = m(2); //this will call the overloaded() 
    cout << "new value is " << newValue << endl; 
} 
+0

Спасибо Саниш - вторая последняя строка - это нуль вопроса, имеет смысл, хотя я вижу, что перегрузка() может быть проблематичной, поскольку в коде нет ничего, что на самом деле говорит вам, что может использовать функция(). – Pete855217

0

Резюме: Перегрузка оператора() в классе C++ позволяет реализовать методы класса с различными типами и количеством параметров, предоставляя разные функциональные возможности для каждого. Уход требуется при перегрузке(), поскольку его использование не дает никаких указаний относительно того, что делается. Он находит ограниченное использование, но может быть эффективным для таких вещей, как манипуляция матрицами.

От: Overloading the() operator (learncpp.com)

Смежные вопросы