0

我想知道如何重载 () 运算符

例如

class A{
    int a,b;
public:
    void operator()(int x, int y);
};

void A::operator()(int x, int y){
    x = a;
    y = b;
}

int main(){
    A a = new A();
    a(5,4); // this will call the overloaded operator
    return 0;
}

我想知道以下是否还有其他用例以及可以调用它的任何其他场景。

4

2 回答 2

3

operator()就像任何其他功能一样。唯一的区别是a.foo()你写而不是调用它a()

你可以像使用任何其他函数一样使用它,你可以尽可能多地重载它,它可以有你想要的任意数量的参数(包括零),它可以被模板化以及你能想到的任何其他函数可以做。

于 2012-11-07T02:29:12.387 回答
0

通常 operator() 用于给对象函数调用语义。如果您的对象可以被视为“做某事”,那么使用此运算符可能是有意义的。这些对象被称为函子。它们通常用于封装一些将重复执行的操作,尤其是在许多对象上。

请参阅 STL 标头algorithm以及functional有趣的示例和用法。

顺便说一句,您正在分配 A 但将其分配给对象而不是指针。当你分配 A 时,你正在打电话给你A::operator(),你的编译器应该抱怨。更改A a = new A()为类似A* a = new A;或更简单的内容A a;,因为a不需要存在于 main 的执行之外。如果您使用指针版本,您必须operator()像这样调用(*a)(5,4);

你的A::operator()意志也没有影响。和x参数y按值传递。而是通过引用传递它们。

于 2012-11-07T02:37:59.210 回答