【问题标题】:How to make a class's function default如何使类的功能默认
【发布时间】:2017-01-20 12:44:36
【问题描述】:

示例代码:

class Sum{
    public:
        void value(int val){_v = val;}
        int add(int val){return _v + val;}
    private:
        int _v;
};

Sum sum;
sum.value(5);
int myResult = sum.add(10);

是否可以将sum.add(10) 设为默认值,这样我可以获得相同的结果:

int myArea = sum(10);

(我怀疑问题标题是错误的,也许是我找不到解决方案的原因。欢迎编辑。)

【问题讨论】:

  • 这就是您可以覆盖运算符的内容。 +-+=-=...所有这些算术运算符都可以被覆盖,因此您可以赋予它们用户定义的行为。此外,您可以覆盖函数调用运算符以获得所需的确切语法。

标签: c++ class arduino


【解决方案1】:

是的,你可以。您可以做的是重载类的operator() 以将其变成函子。你可以添加

int operator()(int val) { return add(val); }

到班级,现在sum(some_value)sum.add(some_value) 是一回事

【讨论】:

  • 太棒了!如果函数不需要参数,是否也可能丢失()?我的意思不是myResult = sum() 只是myResult = sum?
  • @Combinatix 好吧,您可以提供一个转换运算符,将您的类型转换为其他类型。喜欢operator int() { return v_; }。然后你可以像 int foo = sum; 一样使用它
【解决方案2】:

这就是 function call operator 的具体用途。

class Sum{
public:
    void value(int val){ _v = val; }
    int add(int val) const{ return _v + val; }

    // Function call operator
    int operator()(int val) const {
        return add(val);
    }

private:
    int _v;
};

int main()
{
    Sum sum;
    sum.value(5);

    // Calls the function call operator
    int myResult = sum(10);
}

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 2012-05-19
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多