Manipular estructuras
Hola, mi pregunta es la siguiente, se pueden agregar elementos en una estructura en tiempo de ejecución?
Ej
struct datos{
char uno[20];
char dos[10];
};
y que en el programa ejecutado, se puede agregar otro dato tres[3] y utilizarlo?,
Espero que me pudieran decir si es posible, o que me recomendarian hacer,
Gracias de antemano.
Ej
struct datos{
char uno[20];
char dos[10];
};
y que en el programa ejecutado, se puede agregar otro dato tres[3] y utilizarlo?,
Espero que me pudieran decir si es posible, o que me recomendarian hacer,
Gracias de antemano.
Hola Jessica.
No estoy del todo seguro. Voy a buscar qué es lo que tengo y en esta semana te lo paso. Creo que escribiendo algunos templates (algo un poco complicado) se puede.
Pero si safás del C y te metés con C++, por polimorfismo en lugar de pasar una estructura pasás un objeto, y lo comportás de acuerdo a lo que necesites o se haya desarrollado.
Saludos
Mi consulta en el foro es sobre lectura/escritura del puerto USB en C. Si sabés de algo, bienvenida.
No estoy del todo seguro. Voy a buscar qué es lo que tengo y en esta semana te lo paso. Creo que escribiendo algunos templates (algo un poco complicado) se puede.
Pero si safás del C y te metés con C++, por polimorfismo en lugar de pasar una estructura pasás un objeto, y lo comportás de acuerdo a lo que necesites o se haya desarrollado.
Saludos
Mi consulta en el foro es sobre lectura/escritura del puerto USB en C. Si sabés de algo, bienvenida.
En términos simples, tienes dos opciones: usando el concepto de herencia del C++, o el de estructuras incluidas al estilo C.
Acá abajo pongo un ejemplo que muestra las dos opciones. Si no tienes un compilador de C++, elimina la parte del código encerrada por "// SÓLO C++"
#include <iostream>
using namespace std;
struct datos{
char uno[20];
char dos[10];
};
int main()
{
// SÓLO C++:
struct masDatos: public datos // "masDatos" derivada de "datos".
{
char tres[3];
};
masDatos Estos; // declara el objeto de tipo masDatos.
strcpy(Estos.uno, "uno"); // pone algo en cada uno.
strcpy(Estos.dos, "dos");
strcpy(Estos.tres, "3");
cout << "Usando herencia (C++): n";
cout << Estos.uno << 'n' // los muestra.
<< Estos.dos << 'n'
<< Estos.tres << 'n';
// FIN DE SÓLO C++
// Otra forma (estilo C):
struct otrosDatos {
char tres[3];
struct datos Datos;
} otros;
strcpy(otros.Datos.uno, "UNO");
strcpy(otros.Datos.dos, "DOS");
strcpy(otros.tres, "_3");
cout << "nEstilo C: n";
cout << otros.Datos.uno << 'n' // los muestra.
<< otros.Datos.dos << 'n'
<< otros.tres << endl;
cin.get(); // Enter para salir.
return 0;
}
// Alejandro
Ah, y disculpa el embrollo de nombres, hoy estoy poco imaginativo...
Acá abajo pongo un ejemplo que muestra las dos opciones. Si no tienes un compilador de C++, elimina la parte del código encerrada por "// SÓLO C++"
#include <iostream>
using namespace std;
struct datos{
char uno[20];
char dos[10];
};
int main()
{
// SÓLO C++:
struct masDatos: public datos // "masDatos" derivada de "datos".
{
char tres[3];
};
masDatos Estos; // declara el objeto de tipo masDatos.
strcpy(Estos.uno, "uno"); // pone algo en cada uno.
strcpy(Estos.dos, "dos");
strcpy(Estos.tres, "3");
cout << "Usando herencia (C++): n";
cout << Estos.uno << 'n' // los muestra.
<< Estos.dos << 'n'
<< Estos.tres << 'n';
// FIN DE SÓLO C++
// Otra forma (estilo C):
struct otrosDatos {
char tres[3];
struct datos Datos;
} otros;
strcpy(otros.Datos.uno, "UNO");
strcpy(otros.Datos.dos, "DOS");
strcpy(otros.tres, "_3");
cout << "nEstilo C: n";
cout << otros.Datos.uno << 'n' // los muestra.
<< otros.Datos.dos << 'n'
<< otros.tres << endl;
cin.get(); // Enter para salir.
return 0;
}
// Alejandro
Ah, y disculpa el embrollo de nombres, hoy estoy poco imaginativo...
Gracias por su informacion, si me ha servido de referencia, pero creo que si va orientado un poco a templates para poder crear una estructura creada por el usuario, seguire investigando, y les digo como va.
SALUDOS y gracias nuevamente
SALUDOS y gracias nuevamente
Jesica,
Lo que quieres no es factible en tiempo de ejecución porque las estructuras en su definición son estáticas. Sin embargo, lo que podrías hacer es una estructura dinámica que vaya creciendo (o decreciendo) conforme quieras más (o menos) datos.
Es definitiva, la estructura en cuestión en escencia sería una lista de punteros a diferentes tipos de datos de acuerdo a lo que necesites.
La idea es pensada muy rápido y posiblemente sea mas compleja de lo que menciono, pero en teoría funciona, si saltas a C++ la cosa se facilita muchisimo puesto que tendrias una clase que posee una lista de datos, todos éstos de una misma clase, de la cual derivarían los tipos de datos que tu quieras.
Lo anterio, en C++, si es totralmente factible porque algo así hice para un trabajo... hace muchisimo tiempo :)
Si quieres podemos ir profundizando en la idea
Saludos,
Bufalito
Lo que quieres no es factible en tiempo de ejecución porque las estructuras en su definición son estáticas. Sin embargo, lo que podrías hacer es una estructura dinámica que vaya creciendo (o decreciendo) conforme quieras más (o menos) datos.
Es definitiva, la estructura en cuestión en escencia sería una lista de punteros a diferentes tipos de datos de acuerdo a lo que necesites.
La idea es pensada muy rápido y posiblemente sea mas compleja de lo que menciono, pero en teoría funciona, si saltas a C++ la cosa se facilita muchisimo puesto que tendrias una clase que posee una lista de datos, todos éstos de una misma clase, de la cual derivarían los tipos de datos que tu quieras.
Lo anterio, en C++, si es totralmente factible porque algo así hice para un trabajo... hace muchisimo tiempo :)
Si quieres podemos ir profundizando en la idea
Saludos,
Bufalito
