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?






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.