2010-12-03 30 views
6

Tengo una asignación en C++ y tengo problemas para comenzar. El objetivo es "diseñar una clase que use los siguientes operadores sobrecargados para números complejos: >> < < + - * /"Sobrecarga del operador C++ para operaciones con números complejos

Mi pregunta no es sobre la sintaxis de esto, sino más sobre la lógica. Podría usar algo de ayuda sobre asaltos cerebrales.

de entrada de la muestra:
2,5 -2,2
1,0 1,0

salida de muestra:
A = (2,5) + (-2,2) i
B = (1,0) + (1,0) i

A + B = (3,5) + (-1,2) i
A - B = ..............
A * B = ........ ......
A/B = ..............

Entonces, ¿cómo empiezo esto? La clase "Complejo" sobrecarga estos operadores, ¿significa eso que solo puedo usar estos operadores en la clase (es decir, dentro de las funciones públicas)? Si es así, ¿quiero hacerlo de esta manera? ¿O me gustaría hacerlo en mi código de cliente/controlador?

En segundo lugar, ¿es solo agregar i al segundo valor de cada línea? Eso parece demasiado fácil. Cualquier dirección sería muy apreciada. (Solo para que conste, no estoy buscando a nadie que me haga los deberes ... podría usar algo de entrada)

Respuesta

7

Me parece que el objetivo es demostrar una sobrecarga de funcionamiento de clase, así que creo que La idea es que hagas un complejo de clases que contenga información sobre el número real y el número imaginario (el i significa que es imaginario). Maneje varias operaciones entre números complejos en anulaciones de operador que usted mismo hace.

Una vez que tenga eso y vea que funciona (haga un método de prueba estático que realice varias operaciones e imprima los resultados en la pantalla), entonces preocúpese de usar esa clase para trabajar con la entrada ya que la entrada de análisis será otra tarea en sí mismo. A veces es más simple dividir los problemas en problemas más pequeños que intentar hacer ambos al mismo tiempo.

Espero que ayude. ¡Buena suerte!

+0

Seguro que lo hace, muchas gracias. Muy apreciado. –

2

Les gusta pares de valores:

A = N1 + I1i 
B = N2 + I2i 


A + B = (N1 + I1i) + (N2 + I2i) 
     = N1 + I1i + N2 + I2i 
     = (N1 + N2) + (I1i + I2i) 
     = (N1 + N2) + (I1 + I2)i 
A - B = (N1 + I1i) - (N2 + I2i) 
     = N1 + I1i - N2 - I2i 
     = (N1 - N2) + (I1i - I2i) 
     = (N1 - N2) + (I1 - I2)i 

// N1, N2, I1, I2 are all just normal numbers. 
// You can multiply them like normal. You just have to keep track of the `i` 
// Also not that i = sqrt(-1) 
// Therefore i * i = sqrt(-1) * sqrt(-1) 
//     = sqrt(-1)^2 
//     = -1 
A * B = (N1 + I1i) * (N2 + I2i) 
     = (N1 * N2) + (N1 * I2i) + (I1i * N2) + (I1i * I2i) 
     = (N1 * N2) + (N1 * I2)i + (N2 * I1)i + (i * i * I1 * I2) 
     = (N1 * N2) + i((N1 * I2) + (N2 * I1)) + (-1 * I1 * I2) 

     // Simplest form 
     = ((N1 * N2) - (I1 * I2)) + ((N1 * I2) + (N2 * I1))i 


A/B = Repeat as above. 
2

que necesita para diseñar un llamado Complejo clase que incluye al menos:

  • un constructor que le permite construir un objeto complejo de lo real e imaginario valores componentes, por ejemplo, Complex (1, 5)

  • anula el operador + para que pueda agregar dos objetos complejos y devolver un nuevo objeto complejo, p.Complejo (1, 5) + compleja (3, 7) es compleja (4, 12)

  • de manera similar para otros operadores

Pero primero es necesario entender la matemática básica detrás de los números complejos para que puedes escribir los métodos de sobrecarga del operador.

1

Hay algunas cosas que hay que hacer para realizar esta tarea:

definir una clase (por ejemplo Complex) que pueden contener los datos para la parte real e imaginaria de un número complejo.

sobrecarga los respectivos operadores (por ejemplo):

class Complex 
{ 
public: 
    // other declarations here 
    Complex operator+ (const Complex& rhs) const; 
    // other stuff here 
}; 

Implementar los respectivos operadores para llevar a cabo realmente la operación matemática (por ejemplo):

Complex Complex::operator+ (const Complex& rhs) const 
{ 
    Complex result = *this; 
    result.Real += rhs.Real; 
    result.Imaginary += rhs.Imaginary; 
    return result; 
}