()的运算符重载以及可以使用的不同方式和条件

时间:2012-11-07 02:25:11

标签: c++ operator-overloading

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

例如

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;
}

我想知道是否存在以下任何其他用例以及可以调用此方法的任何其他情况。

2 个答案:

答案 0 :(得分:3)

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

你可以像任何其他函数一样使用它,你可以根据需要重载它,它可以有你想要的任意数量的参数(包括零),它可以是模板化的,你能想到的任何其他东西任何其他功能都可以做到。

答案 1 :(得分:0)

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

有关有趣的示例和用法,请参阅STL标题algorithmfunctional

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

那样调用(*a)(5,4);

此外,您的A::operator()也无效。 xy参数按值传递。通过引用传递它们。