我有一个包含Real和Imaginary值的“复杂”类。我正在尝试重载+运算符,所以我可以添加真实到虚构的想象力,但是我在这里撞墙了。
在函数中,我可以轻松获得值。然而,归还他们是一个婊子。
我的计划是重载'='运算符,所以我可以去
复杂的a,b,c;
(设置a和b)
c = a + b;
然后让+ b返回一个复数,然后使复数c等于a + b
返回的复数关于这是否可行的任何意见?
是否可以更容易地做出任何意见?
答案 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类。重用它或者至少看看运算符重载是如何在那里完成的。