Tengo una función a la que quiero pasarle un tipo de dato que es una estructura. ¿Qué formas hay de hacerlo?
S2.
Como pone en cualquier tutorial de C/C++, ni más ni menos.
Pues si no me equivoco como otro cualquier tipo de dato...
void func (const StructA sta); Constante
void func (const StructA& sta); Referencia constante
void func (StructA& sta); Referencia
void func (StructA sta); Valor
Si me equivoco ke me corrijan...
Cita de: 1cacalvoPues si no me equivoco como otro cualquier tipo de dato...
void func (const StructA sta); Constante
void func (const StructA& sta); Referencia constante
void func (StructA& sta); Referencia
void func (StructA sta); Valor
Si me equivoco ke me corrijan...
Bueno, gracias por la respuesta. El tema es que he estado buscando por la red como hacerlo y lo unico que me encuentro es empleando "typedef" pero quería saber si puede hacerse directamente sin crear un tipo de dato.
¿Podrías explicar que es cada cosa en:
Citarvoid func (StructA sta); Valor
S2.
void func ( StructA *sta ); // ^.^ puntero
Cita de: sésvoid func ( StructA *sta ); // ^.^ puntero
Gracias por el "detalle" AHORA lo entiendo.
S2.
Pues haber si no me equivoco...
Constante:
void func (const StructA sta);
Le pasa una copia de la structura a la que no podemos cambiarle el valor
Referencia Constante:
void func (const StructA& sta);
Recibe la misma estructura pero no podemos cambiarle de valor
Referencia:
void func (StructA& sta);
Recibe una referencia a la misma estructura y cuando salga conservara los cambios en los valores.
Valor:
void func (StructA sta);
Recibe una copia de la estructura que cuando salgamos de la función se destruira perdiendo los cambios.
Puntero
void func (StructA* sta);
Recibe un puntero a dicha estructura. Ojo si hacemos un delete, o perdemos la referencia del puntero, se nos puede dar memory leaks.
Si hay algo mal explicado o algun concepto malo rectifiquenme :D
Ya que estoy y por no habrir otro hilo:
¿Cómo puedo declarar e inicializar varias variables en una misma línea?. Recuerdo haber visto esto en algún sitio.
S2.
Comprate un libro de programación básica o leete tutoriales de iniciación. Te hará mucho bien.
Un saludo,
Vicente
¿No faltan puntero constante y puntero a estructura constante? ¿Y a void*? ¿Y a template (y todas sus variantes const)? ¿Y a padre si la estructura tiene herencia (y todas las variantes const a padre)? :shock: Vale, mañana menos café.
¿Pero quieres pasarle, empleando terminología de orientación a objetos, la "instancia" de la estructura o la propia definición de la estructura?
Me explico:
Si tienes
struct TPoint
{
int x;
int y;
TPoint(int aX, int aY) : x(aX), y(aY) {}
};
TPoint p(1,2);
¿Lo que tu quieres es pasar p, que es el punto (1,2) o la definición de la estructura TPoint?
@Fan*
Eso no era a mi comentario, ¿no? Lo digo porque era un claro offtopic total. Supongo que el :shock: debería ser un 8) o un :roll:
Cita de: Warchief@Fan*
Eso no era a mi comentario, ¿no? Lo digo porque era un claro offtopic total. Supongo que el :shock: debería ser un 8) o un :roll:
Era a la pregunta... es que todos habéis respondido a la "obvia", pero la formulación no me parece tan clara como para pensar que es la pregunta típica de tutorial (que igual si...)
Cita de: J_F_NASHCita de: sésvoid func ( StructA *sta ); // ^.^ puntero
Gracias por el "detalle" AHORA lo entiendo.
:shock: ¿Que "detalle"? Sólo era una forma más de pasar una estructura a una función.