Дело в том, что тип double не может хранить мнимые значения.
И все же вы пытаетесь это сделать, например, с помощью sqrt(1);
(хотя вы, вероятно, имели в виду -1).
complex<double>
действительно способен хранить мнимые значения, но, с одной стороны, это не сработает, если присвоить произведению неинициализированного i
значение 1, а с другой стороны, вы, кажется, пытаетесь реализовать комплексные числа самостоятельно. Использование предоставленного сложного стандартного типа несколько побеждает это. Если вы используете его, то вам просто нужно научиться выводить его в нужном вам формате, вместо того, чтобы выполнять всю работу по реализации.
Предположим, что вы больше заинтересованы в том, чтобы сначала это сделать самостоятельно.
Вам нужно всегда представлять комплексные числа в виде двух чисел.
Поэтому я предлагаю изменить ваш код следующим образом.
#include <iostream>
using namespace std;
class Complex
{
private:
/* double i; Won't work, it cannot store imaginary values. */
double imaginarypart;
double realpart;
public:
void setimaginarypart(double a1) {
imaginarypart = a1;
}
void setrealpart(double a2) {
realpart = a2;
}
void printwhole() {
cout << realpart << '+' << imaginarypart << 'i'; // To get the output you want.
}
};
int main()
{
double a, b;
cout << "Enter your realpart" << endl;
cin >> a;
cout << "Enter your imaginarypart " << endl;
cin >> b;
Complex num1;
num1.setimaginarypart(b);
num1.setrealpart(a);
cout << endl;
num1.printwhole();
}
Вместо этого используйте вместо этого существующие решения (например, std :: complex) пытаться программировать один самостоятельно. Вывод их в нужной форме (r + i * I) не требует самостоятельной реализации всего этого.
Взгляните на https://en.cppreference.com/w/cpp/numeric/complex, чтобы узнать, что он предлагает.