C++ ()的运算符重载及其可以使用的不同方式和条件
我想知道如何重载()运算符 比如说C++ ()的运算符重载及其可以使用的不同方式和条件,c++,operator-overloading,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; } 我想
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;
}
我想知道是否还有其他用例可以调用到下面的场景和其他场景中 操作符()
与任何其他函数一样。唯一的区别是,不是像调用a.foo()
那样调用它,而是编写a()
您可以像使用任何其他函数一样使用它,您可以任意重载它,它可以有任意多的参数(包括零),它可以被模板化,您可以想到任何其他函数都可以做的任何事情。operator()
与任何其他函数一样。唯一的区别是,不是像调用a.foo()
那样调用它,而是编写a()
您可以像使用任何其他函数一样使用它,您可以随意重载它,它可以有任意多的参数(包括零),它可以被模板化,您可以想到任何其他函数都可以做的任何事情。一般来说,operator()用于给出对象函数调用语义。如果您的对象可以被视为“正在做某事”,那么使用此操作符可能是有意义的。这些对象称为函子。它们通常用于封装一些将重复执行的操作,尤其是在许多对象上
有关有趣的示例和用法,请参见STL标题算法
和函数
顺便说一下,您正在分配一个A,但将其分配给一个对象而不是指针。当您分配A时,您正在调用A::operator()
,您的编译器应该会抱怨。将A A=newa()
更改为类似A*A=newa代码>或更简单的A因为a
不需要存在于main的执行之外。如果使用指针版本,则必须调用操作符()
,如(*a)(5,4)代码>
此外,您的A::operator()
也将无效。x
和y
参数按值传递。而是通过引用传递它们 在一般情况下,运算符()用于给出对象函数调用语义。如果您的对象可以被视为“正在做某事”,那么使用此操作符可能是有意义的。这些对象称为函子。它们通常用于封装一些将重复执行的操作,尤其是在许多对象上
有关有趣的示例和用法,请参见STL标题算法
和函数
顺便说一下,您正在分配一个A,但将其分配给一个对象而不是指针。当您分配A时,您正在调用A::operator()
,您的编译器应该会抱怨。将A A=newa()
更改为类似A*A=newa代码>或更简单的A因为a
不需要存在于main的执行之外。如果使用指针版本,则必须调用操作符()
,如(*a)(5,4)代码>
此外,您的A::operator()
也将无效。x
和y
参数按值传递。而是通过引用传递它们 一般来说,您是在询问操作符()
的用例(这是一个相当广泛的问题),还是在询问您上面给出的操作符的具体实现,即使用参数作为输入来设置数据成员的操作符?当您说以下内容时,您指的是上面的内容,对吗?重载运算符也可以用a.operator()(5,4)
调用,如果这是您要问的……实际上,我刚刚意识到,您的运算符甚至不设置数据成员。它将局部变量x
和y
设置为其数据成员的值。那一点用处都没有。如果您将参数作为引用operator()(int&x,int&y)
,它可能会变得非常有用。有关函子的无数优点(即重载operator()
的类)的一般信息,请参阅现有的问题:。您一般都在询问operator()
的用例吗(那是一个相当宽泛的问题……),或者您是在询问您上面给出的运算符的具体实现,即使用参数作为输入来设置数据成员的运算符?当您说以下内容时,您是指上面的内容,对吗?重载运算符也可以用a.operator()调用(5,4)
,如果这就是你要问的……事实上,我刚刚意识到,你的操作符甚至没有设置数据成员。它将局部变量x
和y
设置为其数据成员的值。这一点都不是很有用。如果你将参数作为引用operator()(int&x,int&y)
。有关函子的无数优点(即重载运算符()的类)的一般信息,请参阅现有问题:。