【问题标题】:Operations with complex numbers复数运算
【发布时间】:2012-02-20 18:59:08
【问题描述】:

我想知道如何在不分别使用实部和虚部的情况下对复数执行一些简单的运算。

例子:

complex<double> A(0.0, 1.0);
complex<double> B;
B = A * 2 + A;

无法编译:

错误 C2678:二进制“*”:未找到采用“std::complex”类型左侧操作数的运算符(或没有可接受的转换)。

我读到这是转换的问题。这是一个真正的问题,尤其是在代码更复杂的情况下。

有没有办法对复数进行运算?

【问题讨论】:

    标签: c++


    【解决方案1】:

    这可能是转换问题。也许将常量 2​​ 指定为浮点值:

    B = A * 2.0 + A;
    

    【讨论】:

    • 所以如果我有一个整数值,首先我需要转换它,是吗?
    • @Ale:如果转换,你的意思是演员,那么是的。 B = A * (double)myint + A;
    【解决方案2】:

    这是一个转换问题:

    #include <iostream>
    #include <complex>
    using namespace std;
    
    int main ()
    {
      complex<double> A (5.0, 10.0);
      complex<double> B;
    
      B = A * 2.0 + A; 
      cout << "B = " << B << endl;
      return 0;
    } 
    

    效果很好。

    【讨论】:

      【解决方案3】:

      C++ 提供运算符重载,这是一种非常简单友好的处理方式。

      Complex operator + (Complex a, Complex b)
      {
          return Complex(a.real + b.real, a.imag + b.imag);
      }
      
      Complex operator * (Complex a, double b)
      {
          return Complex(a.real * b, a.imag * b);
      }
      

      【讨论】:

      • 我不知道如何使用它。我必须在课堂上实现它们吗?
      • 你可以在类的内部和外部实现它。我写的是外部声明。如果数字是 private,它们必须是 friend 函数。为了在里面声明它们,你只需要提供右手操作数。
      • cprogramming.com/tutorial/operator_overloading.html":在这里你可以找到一些很好的例子。幸运的是,它们是为复数编写的!
      猜你喜欢
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多