[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