如何最有效地从重载运算符返回多个值? (C ++)

时间:2010-11-07 20:48:04

标签: c++ overloading

我有一个包含Real和Imaginary值的“复杂”类。我正在尝试重载+运算符,所以我可以添加真实到虚构的想象力,但是我在这里撞墙了。

在函数中,我可以轻松获得值。然而,归还他们是一个婊子。

我的计划是重载'='运算符,所以我可以去

复杂的a,b,c;

(设置a和b)

c = a + b;

然后让+ b返回一个复数,然后使复数c等于a + b

返回的复数

关于这是否可行的任何意见?

是否可以更容易地做出任何意见?

4 个答案:

答案 0 :(得分:2)

将它们作为complex返回! e.g。

const complex operator+(const complex &a, const complex &b)
{
    return complex(a.re + b.re, a.im + b.im);
}

你不应该重载operator=;编译器将为您生成一个逐个元素的副本,这可能足以满足复杂的类。

答案 1 :(得分:2)

我不确定我是否理解这个问题。你有complex班吗?

struct complex
{
    complex(float real, float imag) :
    real(real), imag(imag)
    {}

    // first make the mutating version
    complex& operator+=(const complex& rhs)
    {
        real += rhs.real; 
        imag += rhs.imag;

        return *this;
    }

    float real, imag;
};

// then use that for the non-mutating version
complex operator+(complex lhs, const complex& rhs)
{
    lhs += rhs;
    return lhs;
}

这当然只是一项练习;我们有std::complex

答案 2 :(得分:1)

重载+运算符有什么问题:

complex operator+(const complex& a, const complex& b) const {
    return complex(a.real + b.real, a.imag + b.imag);
}

运营商=()同样如此? (但编译器默认情况下会给你这个)

complex& operator=(const complex& a) {
    real = a.real;
    imag = a.imag;
    return *this;
}

答案 3 :(得分:0)

它是可行的,但标准库中已经有complex类。重用它或者至少看看运算符重载是如何在那里完成的。