[C con Clase] Tipos definidos por el usuario

Luis Pedro Méndez elinv.elinv en gmail.com
Jue Dic 22 10:31:16 CET 2011


//Hola estimado un saludo.
//No hay novatos, te diría que somos todos aprendices
//en mi caso llevo tanto tiempo aprendiendo que ya me olvide de cuantos
//Tienes razón en que no se puede decir que no porque no
//Para ello -prueba y error- hasta saber porque??
//Aquí te dejo un ejemplo que tal vez pueda ayudar a entender, basado en lo
//que tu tan gentilmente has acercado.

#include <iostream>
using namespace std;

int main()
{
    //Establecemos la estructura como tu lo habías hecho
    //Con un pequeño aditamento
    cout << "PRIMER EJEMPLO" << endl;
    struct
    {
        char nombre[8];
        char  apellido[8];
    } alumno2 = {"yolmer","rosales"}, alumno = {"yolmer","rosales"};

    //La mostramos
    cout << alumno2.nombre << endl;
    cout << alumno2.apellido << endl;

    cout << alumno.nombre << endl;
    cout << alumno.apellido << endl << endl;

    //Se puede observar que la estructura es una pero le hemos asignado
    //dos nombres distintos.
    //Pero la estructura sigue siendo una sola (casi un typedef)
    //No hemos realizado el alumno2=alumno que sería igual a la
    //Inicialización de la estructura superior por una cuestión puramente
didactica.

    /*Veamos el mismo ejemplo con la asignación igual*/
    cout << "SEGUNDO EJEMPLO" << endl;
    struct
    {
        char nombre[8];
        char  apellido[8];
    } alumnob2, alumnob = {"yolmer","rosales"};

    alumnob2 = alumnob;

    //La mostramos
    cout << alumnob2.nombre << endl;
    cout << alumnob2.apellido << endl;

    cout << alumnob.nombre << endl;
    cout << alumnob.apellido << endl << endl;

    //Parece seguir funcionando.

    cout << "TERCER EJEMPLO" << endl;
    //Veamos por último la propuesta
    struct
    {
        char nombre[8];
        char  apellido[8];
    } alumnoc = {"yolmer","rosales"};

    struct
    {
        char nombre[8];
        char  apellido[8];
    } alumnoc2;

    //La asignación igual no funcionará pues son dos estructuras diferentes
    //Puede ser que a simple vista tengan nombres parecidos y el mismo
formato de datos
    //Pero son dos estructuras separadas, que ocupan distintos espacios en
memoria y aun
    //cuando pudieran tener el mismo contenido, pues se podría copiar una
estructura a la
    //otra mediante strcpy , si borraras el contenido de una, aun tendrías
asequible
    //el contenido de la otra.

    //si podrías hacer la asignación mediante strcpy, en cada campo de la
estructura
    //ejemplo
    strcpy(alumnoc2.nombre, alumnoc.nombre);
    strcpy(alumnoc2.apellido, alumnoc.apellido);

    cout << alumnoc2.nombre << endl;
    cout << alumnoc2.apellido << endl;

    //Fundamental es... creo humildemente... debemos entender el
funcionamiento para el
    //que fueron programadas las distintas rutinas y que el programador de
ellas nos han
    //permitido una flexibilidad enorme pero hasta el punto de lo
desarrollado.

    //por último esta línea
    //alumnoc2=alumnoc;
    //Enviaría un error
    //Porque aunque las dos estructuras tienen el mismo aspecto, no son
realmente equivalentes.
    return 0;
}

Atentamente.


Elinv.










El 21 de diciembre de 2011 23:48, Yolmer Rosales
<yolmer.rosales en gmail.com>escribió:

> Hola amigos.-
>
> Hace poco le estaba ayudando a un novato con el "c/c++" y le surgio una
> duda.
>
> Yo le dije --No se puede porque no y punto. Sin embargo me da pena
> contestar así. Por lo tanto le sabré agradecer si alguien me explica como
> si tuviera 4 años por que no se puede realizar la asignación de estos tipos
>
>  struct
>   {
>          char nombre[8];
>          char  apellido[8];
>          } alumno = {"yolmer","rosales"};
>   struct
>   {
>          char nombre[8];
>          char  apellido[8];
>          }alumno2 ;
>
> alumno2 = alumno;
>
> Ya se que la forma correcta es así
>
>  struct
>   {
>          char nombre[8];
>          char  apellido[8];
>          }alumno2, alumno = {"yolmer","rosales"};
>
>    alumno2 = alumno;
>
>
> pero no lo entiendo. :-)
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111222/d78d9d52/attachment.html>


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