[C con Clase] ayuda con class y struct

Salvador Pozo salvador en conclase.net
Vie Abr 11 11:18:37 CEST 2008


El pasado 2008-04-03 20:07:22, Leonel Florin Selles escribió:
 
LFS> Hola amigos:
LFS> necesito la ayuda de ustedes para poder continuar;
LFS> bueno, la cuestión es que estoy realizando o intentando crear una
LFS> clase para resolver aritmética con números complejos con un binomio
LFS> y tengo un problema, he creado dos struct como miembros de datos
LFS> privados dentro de la clase que cada una va a representar un número
LFS> complejo y he creado un constructor para inicializar estas
LFS> estructuras pero me da error, diciendo que no puede convertir un
LFS> tipo en, bueno les pongo la porción de código que tengo y les pongo
LFS> el error....;

Hola:

Programante ya te respondió, pero voy a ampliar su propuesta.

Para empezar, creo que a tu solución le falta un poco de encapsulamiento.

En lugar de declarar dos estructuras diferentes, una para cada número complejo, deberías crear una sólo. Ten en cuenta que, tal como las has declarado, numeroImg1 y numeroImg2 son tipos diferentes, y por lo tanto, en principio incompatibles.

Además, puesto que tratamos con clases, no veo por qué no usar clases para estos números en lugar de estructuras.

Lo segundo, para hacer lo que pretendes con el constructor, no deberías usar la construcción que propones.

El primer problema es que la estructura numeroImg1 es privada, por lo que nunca podrás usar un objeto de ese tipo como parámetro en el constructor.


LFS>          complex(numeroImg1 = (1.0, 1.0));

En este constructor hay varios errores.

Por una parte, numeroImg1 es un tipo, por lo que no se le puede asignarár nada.

Falta identificar el parámetro, por ejemplo, n1.

Después podemos asignar un valor por defecto, pero para ello hay que usar un constructor.

Por último, hay que asignar el valor del parámetro al miembro adecuado de la clase.

Por ejemplo:

    complex(numeroImg1 n1 = numeroImg1(1.0, 1.0)) : numero1(n1) {}

El ejemplo completo, según mi opinión, sería:

--8<----
class numeroImg {
    public:
      numeroImg(double r=0.0, double i=0.0) : parteReal(r), parteImag(i) {}
    private:
      double parteReal;
      double parteImag;
};

class complex{
  private:
    numeroImg numero1;
    numeroImg numero2;
  public:
    complex() : numero1(1.0, 1.0) {}
};
--8<----

Este constructor para complex es equivalente al que usé más arriba, pero a mi modo de ver, mucho más claro.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase