运算符重载复数

时间:2013-04-11 14:09:48

标签: c++ templates operator-overloading

我想重载*运算符,以便它将乘以类的复杂子变量并返回复杂的结果。我的想法如下:

#include <complex>

using namespace std; 

class a{
public:
  std::complex<double> x0;
...
};

template<class T> complex<T>  operator*(const a &lfv, const a &rfv){
  return lfv.x0*rfv.x0;
}

但它不起作用......任何想法或评论?

3 个答案:

答案 0 :(得分:3)

您的班级拥有std::complex<double>个数据成员,而不是模板。您需要一个非模板函数:

std::complex<double> operator*(const a& lfv, const a& rfv){
  return lfv.x0*rfv.x0;
}

在您的示例中,模板函数无法从传递给它的参数中推断出返回类型。

答案 1 :(得分:1)

复杂类已经处理了这一点,即它总是在乘法后返回复杂的结果。

用法如下:

complex<double> p(10,20);
complex<double> q(2,3);
std::cout << p*q << endl;

输出是:

(-40,70)

或者,如果你可以这样做:

class a{
public:
  std::complex<double> x0;
};

complex<double>  operator*(const a &lfv, const a &rfv){
  return lfv.x0*rfv.x0;
}

int main()
{
    a  y;
    y.x0 = complex<double>(10,20);
    a  z;
    z.x0 = complex<double>(10,20);
    std::cout << y*z << endl;
}

答案 2 :(得分:0)

我无法想办法找到你要找的东西(从complex<T>返回operator*),因为operator*无法自动扣除该类型,所以你有指定类型,如下面的示例:

a my_var1;
a my_var2;
complex<double> result = operator*<double>(my_var1, my_var2);

...或者您可以关注@juanchopanza建议的内容,不要将模板与operator*一起使用。