zoukankan      html  css  js  c++  java
  • 函数调用运算符重载

    如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。因为这样的类同时也能存储状态,所以与普通函数相比它们更加灵活。

    例如:

    struct absInt{
        int operator()(int val) const{
            return val<0?-val:val;
        }
    }

    这个类只定义了一种操作:函数调用运算符,它负责介接受一个int类型的实参,然后返回该实参的绝对值。

    我们使用调用运算符的方式是令一个absInt对象作用于一个实参列表,这一过程看起来非常像调用函数的过程:

    int i=-42;
    absInt absObj;
    int ui=absObj(i);   //将i传递给absObj.operator()

    即使absObj只是一个对象而非函数,我们也能“调用”该对象。调用对象实际上是在运行重载的调用运算符。在此例中,该运算符接受一个int值并返回其绝对值。

    注意:函数调用运算符必须是成员函数,一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或类型上有所区别。(重载)

    如果类定义了调用运算符,则该类的对象称为函数对象。因为可以调用这种对象,所有我们说这些对象的“行为像函数一样”。

    含有状态的函数对象类

    和其他类一样,函数对象类除了operator()之外也可以包含其他成员。函数对象类通常含有一些数据成员,这些成员被用于定制调用运算符中的操作。

  • 相关阅读:
    关于Monitor和lock的锁操作 笔记
    模型/数据验证(System.ComponentModel.DataAnnotations)笔记
    NSIS 打包操作
    关于IE和非IE浏览器的一些差异笔记
    Wpf 字典触发器
    关于MongoDB在C#的使用
    Apache JMeter
    关于在移动端方面的css应用
    关于csc.exe
    增量运算符+=和*=的原理与不可变序列增量运算效率低的原因
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4053801.html
Copyright © 2011-2022 走看看