中的复数

时间:2014-11-13 09:20:06

标签: c++ complex-numbers

我正在学习结构,在我的老师创建了一个复杂数字的结构(由两部分组成的数字:一个真实的和一个虚构的数字)。

#include <iostream>
#include <cmath>
#ifndef COMPLEX_DATA_H
#define COMPLEX_DATA_H
struct complex_data 

 {
   double re = 0; // real part
   double im = 0; // immaginary part
 };

#endif

int main()

 {

  std::cout << "Insert two complex numbers (re, im): ";
  complex_data z1, z2;
  std::cin >> z1.re >> z1.im;
  std::cin >> z2.re >> z2.im;

  ... // the code continues

  }

我想问两个问题:

  1. 将z1和z2保持未初始化会导致任何问题,因为它们在函数内部并且默认的inizialitation未定义?

  2. 我们如何编写复数变量的实际形式?

    实际上就像这样c = 3 + 2i。

    但是如果我们写它,计算机会对它求和,因为它不知道实数和虚数之间的区别。因此,我们将被迫使用一个字符串,但在这种情况下,它将成为一系列的charcaters!有什么想法吗?

    使用Ubuntu 14.04,g ++ 4.9.2。

2 个答案:

答案 0 :(得分:1)

从C ++ 11开始,你有User defined literal(从C ++ 14开始,对于纯虚数std::complex<double>,你有标准文字operator ""i

您可以为自定义operator ""_i以及struct complex_data编写自己的operator +以获得您期望的内容,例如:

constexpr complex_data operator"" _i(unsigned long long d)
{ return complex_data{ 0.0, static_cast<double>(d) }; }

Live example

答案 1 :(得分:0)

Q1-构造函数用于初始化成员变量使用它们。 Q2-实际表格可以使用字符串编写,只需显示即可。 c = 3 + 2i。 编译器真的不知道这个,你可以重载+操作符。 如果你定义+运算符,将执行添加。 (无论代码是用该函数编写的,例如real + = a.real;)