如何使类的功能默认

Posted

技术标签:

【中文标题】如何使类的功能默认【英文标题】: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);

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

【问题讨论】:

这就是您可以覆盖运算符的内容。 +-+=-=...所有这些算术运算符都可以被覆盖,因此您可以赋予它们用户定义的行为。此外,您可以覆盖函数调用运算符以获得所需的确切语法。 【参考方案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);

【讨论】:

以上是关于如何使类的功能默认的主要内容,如果未能解决你的问题,请参考以下文章

如何使类的成员只能在任何包的子类中访问?

如何使类继承自Python中的任何对象

如何使类工厂创建所需的派生类

Hibernate框架对查询功能优化

设计模式之装饰器模式

在 Python 中使类不可变的方法