operator overload

#include <iostream>

class Complex {
public:
    Complex() : real(0), imag(0) {}

    Complex operator + (const Complex& obj) {
        Complex temp;
        temp.real = real + obj.real;
        temp.imag = imag + obj.imag;
        return temp;
    }

    Complex operator - (const Complex& obj) {
        Complex temp;
        temp.real = real - obj.real;
        temp.imag = imag - obj.imag;
        return temp;
    }

    Complex operator * (const Complex& obj) {
        Complex temp;
        temp.real = (real  obj.real) - (imag  obj.imag);
        temp.imag = (real  obj.imag) + (imag  obj.real);
        return temp;
    }

    friend std::ostream& operator << (std::ostream& out, const Complex& obj);

    friend std::istream& operator >> (std::istream& in, Complex& obj);

private:
    double real;
    double imag;
};

std::ostream& operator << (std::ostream& out, const Complex& obj) {
    out << obj.real << " + " << obj.imag << "i";
    return out;
}

std::istream& operator >> (std::istream& in, Complex& obj) {
    std::cout << "Enter real part: ";
    in >> obj.real;
    std::cout << "Enter imaginary part: ";
    in >> obj.imag;
    return in;
}

int main() {
    Complex c1, c2, result;

    std::cout << "Enter values for the first complex number:\n";
    std::cin >> c1;

    std::cout << "Enter values for the second complex number:\n";
    std::cin >> c2;

    result = c1 + c2;
    std::cout << "Sum: " << result << std::endl;

    result = c1 - c2;
    std::cout << "Difference: " << result << std::endl;

    result = c1 * c2;
    std::cout << "Product: " << result << std::endl;

    return 0;
}