【问题标题】:Compound assignment operator overloading复合赋值运算符重载
【发布时间】:2015-04-29 10:06:29
【问题描述】:

我已经看到 Boost 给了你这样做的可能性:

v*=c 其中 c 是双精度数,v 是向量

作为练习,我怎样才能正确地重载 *=,它的工作方式与上一个示例相同(右侧为 double)?

【问题讨论】:

    标签: c++ vector operator-overloading


    【解决方案1】:

    这样的事情怎么样?

    // in class
    T& operator *= (double d)
    {
       member *= d;
       return *this;
    }
    
    // outside of class
    T operator * (T v, double d)
    {
       v *= d;
       return v;
    }
    

    【讨论】:

    • 您在第二个示例中缺少=
    • @maja 这不是例子,它只是为了保持一致性而重载了operator *。
    • 那么你的代码是在修改参数v,这在你写v1 = v * 4.2;时不应该发生
    • @maja 是复制品,实物不会被修改。
    • 该死,你是对的。值传递。可惜没看到。
    【解决方案2】:

    您的方法如下所示:

    inline vector operator *= (vector v, double &b);
    

    它为类向量重载,应采用双精度,应修改对象本身并应返回自身以用作v1 = v2*= 4.2;

    由于是练习,这里就不贴实现了。

    【讨论】:

      猜你喜欢
      • 2020-03-23
      • 1970-01-01
      • 2018-05-13
      • 2011-11-16
      • 2020-04-17
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2020-12-01
      相关资源
      最近更新 更多