Комплексные числа в

Я изучаю структуры, в сводном коде мой учитель создал структуру комплексных чисел (числа, которые образованы двумя частями: реальной и мнимой).

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

 {
 ****** re = 0; // real part
 ****** 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

 }
</cmath></iostream>

Я хотел бы задать два вопроса:

  1. Если оставить z1 и z2 неинициализированными, это вызовет проблемы, если они находятся внутри функции, а их инициализация по умолчанию не определена?

  2. Как мы можем написать фактическую форму переменной, которая является комплексным числом?

    В действительности что-то вроде этого c = 3 + 2i.

    Но если мы напишем его, компьютер будет его суммировать, потому что он не знает разницы между действительными числами и мнимыми. Поэтому мы будем вынуждены использовать строку, но в этом случае она станет последовательностью символов charcaters! Есть идеи?

    Использование Ubuntu 14.04, g++ 4.9.2.

2 ответа

Начиная с С++ 11, у вас есть пользовательский литерал (а с С++ 14 у вас есть стандартный литерал- оператор "i" для чистого мнимого числа std::complex).

Вы можете написать собственный operator ""_i для своей настраиваемой struct complex_data а также operator + чтобы получить то, что вы ожидаете, например:

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

Живой пример.


Q1- Конструкторы предназначены для инициализации переменных-членов. Q2- Фактическая форма может быть записана с использованием строк, которые имеют простое отображение. c = 3 + 2i. Компилятор действительно не знает этого, вы можете перегрузить + operarator. если вы определяете + добавление оператора. (любой код написан в этой функции, например real+ = a.real;)

licensed under cc by-sa 3.0 with attribution.