操作员对()的过载及其可以使用的不同方式和条件

Operator overloading of () and the different ways and conditions it can be used

本文关键字:方式 条件 可以使 操作员      更新时间:2023-10-16

我想知道如何超载()操作员

例如

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

我想知道是否还有其他用例以及任何其他可以调用的情况。

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

您可以像其他任何功能一样完全使用它,您可以根据需要超载它,它可以随意使用任意数量的参数(包括零),可以将其模板和其他任何您可以想到的参数任何其他功能都可以做。

在常规操作员()中用于给出对象函数调用语义。如果您的对象可以被视为"做某事",那么使用此操作员可能是有意义的。这些对象称为函子。它们通常被用来封装一些将反复采取的动作,尤其是在许多物体上。

有关有趣的示例和用途,请参见STL标题algorithmfunctional

顺便说一句,您是在分配A,但将其分配给对象而不是指针。当您分配A时,您正在调用A::operator(),并且您的合适者应该抱怨。将A a = new A()更改为A* a = new A;或更简单的A a;之类的东西,因为a不需要在Main的执行之外存在。如果您使用指针版本,则必须像(*a)(5,4);

一样调用operator()

您的A::operator()也没有效果。xy参数按值传递。而是通过引用传递。