Classe Complex. Considere a classe Complex mostrada

nas figuras 19.20 a 19.22. A classe permite operações nos

chamados números complexos. Estes são números no formato

realPart + imaginaryPart * i, onde i tem o valor

- 1

a) Modifique a classe para permitir a entrada e a saída

de números complexos por meio de operadores >> e

remover a função print da classe).

b) Sobrecarregue o operador de multiplicação para

permitir a multiplicação de dois números complexos,

como na álgebra.

c) Sobrecarregue os operadores == e != para permitir

comparações de números complexos.

Passo 1

Vamos aprimorar a classe Complex. Adicionaremos a funcionalidade a objetos de aída/entrada desse tipo, multiplicaremos e compararemos os objetos.

Vamos declarar a classe com as funções adicionais no arquivo de cabeçalho "Complex.h" da seguinte forma.

Adicione as funções de sobrecarga do operador de extração/inserção como amigo para permitir o acesso a membros de dados privados da classe.

#ifndef H_COMPLEX_H

#define H_COMPLEX_H

#include

using namespace std;

class Complex {

friend ostream &operator

friend istream &operator>>(istream&, Complex&);

public:

Complex(double = 0.0, double = 0.0);

Complex operator+(const Complex&) const;

Complex operator-(const Complex&) const;

Complex operator*(const Complex&) const;

bool operator==(const Complex&) const;

bool operator!=(const Complex&) const;

private:

double real;

double imaginary;

};

#endif

Agora, vamos implementar as funções no arquivo fonte "Complex.cpp".

Em primeiro lugar, o cabeçalho do arquivo junto com as funções que já estão implementadas nas figuras da tarefa:

#include "Complex.h"

Complex::Complex(double realPart, double imaginaryPart)

: real(realPart), imaginary(imaginaryPart) {}

Complex Complex::operator+(const Complex &operand2) const

{

return Complex(real + operand2.real,

imaginary + operand2.imaginary);

}

Complex Complex::operator-(const Complex &operand2) const

{

return Complex(real - operand2.real,

imaginary - operand2.imaginary);

}

...

Passo 2

  1. A função de sobrecarga do operador de extração simplesmente utiliza o objeto ostream para gerar o objeto como ele foi gerado na função print() que removemos.
  2. Certifique-se de retornar o objeto ostream para permitir o encadeamento de outras expressões de saída.

    ostream &operator

    output

    return output;

    }

    O operador de inserção pegará dois valores duplos e os definirá no objeto da seguinte maneira. Além disso, certifique-se de retornar o objeto istream para permitir o encadeamento.

    istream &operator>>(istream &input, Complex &c) {

    input >> c.real >> c.imaginary;

    return input;

    }

  3. Para multiplicar os objetos, use a aritmética dos números complexos:
  4. Complex Complex::operator*(const Complex &operand2) const

    {

    return Complex(operand2.real * real +

    operand2.imaginary * imaginary,

    operand2.real * imaginary +

    operand2.imaginary * real);

    }

    Passo 3

  5. Para comparar os objetos, compararemos seus membros de dados da seguinte forma:

bool Complex::operator==(const Complex &c) const {

return c.real == real && c.imaginary == imaginary;

}

bool Complex::operator!=(const Complex &c) const {

return c.real != real || c.imaginary != imaginary;

}

O arquivo principal para fins de demonstração:

#include

#include "Complex.h"

using namespace std;

int main()

{

Complex c1(13.0, 27.0);

Complex c2;

cin >> c2;

Complex c3 = c1 * c2;

cout

if (c1 == c2)

cout

if (c1 != c2)

cout

}

Resposta

Ver desenvolvimento.