Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Formas de pasar a una función un tipo de dato struct? C++

Iniciado por J_F_NASH, 27 de Marzo de 2007, 01:40:22 PM

« anterior - próximo »

J_F_NASH

Tengo una función a la que quiero pasarle un tipo de dato que es una estructura. ¿Qué formas hay de hacerlo?

S2.

ethernet

Como pone en cualquier tutorial de C/C++, ni más ni menos.

1cacalvo

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...

J_F_NASH

Cita de: "1cacalvo"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...


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.

sés

Soy indeciso... ¿o no?

J_F_NASH

Cita de: "sés"void func ( StructA *sta );  // ^.^ puntero

Gracias por el "detalle" AHORA lo entiendo.



S2.

1cacalvo

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

J_F_NASH

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.

Vicente

Comprate un libro de programación básica o leete tutoriales de iniciación. Te hará mucho bien.

Un saludo,

Vicente

Warchief

¿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é.

Fanakito

¿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?

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:

Fanakito

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...)

sés

Cita de: "J_F_NASH"
Cita de: "sés"void 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.
Soy indeciso... ¿o no?