[C con Clase] ayuda con class y struct

Leonel Florín Sellés leonel06033 en cfg.jovenclub.cu
Vie Abr 11 17:00:48 CEST 2008


hola amigo:

primero que todo, déjenme decir que soy un novato en este mundo de
la programación de C/C++, yo estoy estudiando por tres tomos de
c/c++ que están muy buenos y dado a las limitaciones del
conocimiento que he alcanzado, porque de seguro me falta mucho y el
que no sabe es como el que no ve, tengo estas discrepancias con lo
que me han comentado, y déjenme decirle que se los agradezco porque
me he dado cuanta de varias cosas, y comienzo a describir mi
discrepancia.

1- preguntándole al compañero "Salvador Pozo"
<salvador en conclase.net> que me aconsejo.
Estoy muy de acuerdo cuando, me aconsejas que debería realizar una
clase para un número complejo, mientras más separado mejor y
mientras más simple mejor pero, ahora ya tengo la duda y te diré.

cuando mi amigo dice
--------------------
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.
--------------------
Según he leído, y claro que puede que este equivocado, todos los
miembros de datos (campos) que sean tanto privados o públicos pueden
 ser accedidos por cualquier miembro de la clase, incluyendo las
funciones miembros (métodos) tal es el caso en el ejemplo siguiente:

class cuadrado {
    private:
        int base;
        int exponente;
        .....
    public:
        cuadrado(int = 0, int = 1);
        void setBase(int);
        void setExp(int);
        .....
};

aquí los miembros de datos (campos) son privados, y los estoy
accediendo desde una función miembro (método) publica.

mi amigo también dice
----------------------
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án nada.
Falta identificar el parámetro, por ejemplo, n1.
----------------------

aquí en cuestión a esto, vemos en el ejemplo anterior del
constructor, que esta recibiendo dos tipos de objetos y se les esta
asignando una valor por omisión, no a los tipos de datos como tal,
si no a las variables que recibirán los valores.
aquí en el constructor y en las demás funciones miembros (métodos)
no es necesario especificar el nombre de la variable para el tipo,
puesto que estas funciones miembros (método) son los prototipos de
función y los identificadores serán obviados (claro que para un
mayor entendimiento siempre se deben poner), y en las definiciones
de las funciones miembros (métodos) si tenemos que poner el
identificador de las variables como seria

cuadrado::cuadrado(int b, int exp)
{
....
}

y aquí no hace falta volver a especificar los valores por omisión.

también el ejemplo que me pones

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

me da el mismo error, y lo adapte a mi situación que es la misma.

y por ultimo
----------------
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) {}
};
----------------

este ejemplo que me das me pincha a las mil maravillas, esta OK,
pero la cuestión es que no puedo utilizar las struct.

bueno amigo y amigos, tras a ver leído todo esto que he escrito
espero que si estoy equivocado, sin ninguna demora me rectifiques
todo, pera así yo no seguir tan siego, no importa, para mi tener
errores no es tan malo porque así siempre aprendo mas.

ahora, quisiera poner mis dudas con respecto a lo que me escribe mi
otro amigo
"Fco.Vidaller" <pacovidaller en yahoo.es>
1- el me pone un ejemplo, que en el mismo no entiendo algunas
cositas que muestro en el ejemplo
--------------------
#ifndef COMPLEJO_H_
#define COMPLEJO_H_

class complejo
{
private:
    double real;
    double imag;
public:
    complejo();
    complejo(double, double i = 0.0);
    virtual ~complejo();
    double getReal(void) { return real; }
    double getImag(void) { return imag; }
    void setReal(double r) { real = r; }
    void setImag(double i) { imag = i; }
};
--------------------

amigo, no entiendo porque utilizas dos constructores, uno sin
recibir parámetros y otro con los parámetros.

ya, todo lo demás lo comprendo, bueno,
amigo y amigos nuevamente, espero me acribillen a respuestas, puesto
que necesito aclarar todo esto lo antes posible.

saludos y esperando..............











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