操作员对()的过载及其可以使用的不同方式和条件
Operator overloading of () and the different ways and conditions it can be used
我想知道如何超载()操作员
例如
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标题algorithm
和functional
。
顺便说一句,您是在分配A,但将其分配给对象而不是指针。当您分配A时,您正在调用A::operator()
,并且您的合适者应该抱怨。将A a = new A()
更改为A* a = new A;
或更简单的A a;
之类的东西,因为a
不需要在Main的执行之外存在。如果您使用指针版本,则必须像(*a)(5,4);
operator()
您的A::operator()
也没有效果。x
和y
参数按值传递。而是通过引用传递。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 如何在c++中为模板函数实例创建快捷方式
- 在没有太多条件句的情况下,我如何避免被零除
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 无论条件是否为true,if总是在c++中执行
- 在c代码之间共享数据的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 使用逻辑 AND (&&) 时,如何以编程方式查看C++中不满足哪些条件?
- 优雅的方式,将初始化器移动到有条件的循环后面
- 操作员对()的过载及其可以使用的不同方式和条件
- 不同的条件检查方式
- 逗号(,)在条件部分中两个表达式之间的for循环中的工作方式
- 编写有条件可选构造函数的最佳方式
- 当某个条件为真时,如何在 Eclipse 中以编程方式设置C++断点
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 如何以标准方式组合来自type_traits的条件
- 用指针写条件的几种方式的区别
- 有条件地使用RAII的最佳方式
- 当用户输入具有值时,以某种方式绕过了条件