我正在学习结构,在我的老师创建了一个复杂数字的结构(由两部分组成的数字:一个真实的和一个虚构的数字)。
#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
}
我想问两个问题:
将z1和z2保持未初始化会导致任何问题,因为它们在函数内部并且默认的inizialitation未定义?
我们如何编写复数变量的实际形式?
实际上就像这样c = 3 + 2i。
但是如果我们写它,计算机会对它求和,因为它不知道实数和虚数之间的区别。因此,我们将被迫使用一个字符串,但在这种情况下,它将成为一系列的charcaters!有什么想法吗?
使用Ubuntu 14.04,g ++ 4.9.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) }; }
答案 1 :(得分:0)
Q1-构造函数用于初始化成员变量使用它们。 Q2-实际表格可以使用字符串编写,只需显示即可。 c = 3 + 2i。 编译器真的不知道这个,你可以重载+操作符。 如果你定义+运算符,将执行添加。 (无论代码是用该函数编写的,例如real + = a.real;)