Operador de selección de miembro [?] [C++]

Iniciado por milx86, 17 Marzo 2014, 19:09 PM

0 Miembros y 1 Visitante están viendo este tema.

milx86

Hola a todos, espero esten bien.
Quisiera que me ayuden con esta duda:
Si tengo las siguientes estructuras


Código (cpp) [Seleccionar]

struct carta{
   int fig;
   int num;
};

struct nodo{
   struct carta naipe;
   struct nodo *sgte;
};

typedef struct nodo NODO;
typedef struct nodo* nodoPtr;
nodoPtr MAZO = NULL;


¿Cual seria la forma correcta de acceder a los datos fig y num? :-\

Código (cpp) [Seleccionar]
   
    nodoPtr nuevo;
    nuevo = new(NODO);
    (nuevo->naipe).fig = 0;
    (nuevo->naipe).num = 0;


Código (cpp) [Seleccionar]

   (nuevo->naipe)->fig = 0;


Código (cpp) [Seleccionar]

   nuevo->(naipe.fig) = 0;


Gracias  :)
La abstracción es la clave para lidiar con la complejidad.

amchacon

¿Vienes de Java? Lo digo por esto

Código (cpp) [Seleccionar]
nodoPtr nuevo;
nuevo = new(NODO);


Esto no es valido ya que nuevo no es un puntero. Y aunque lo fuera esa no es la sintaxis del new:
http://www.cplusplus.com/reference/new/operator%20new%5B%5D/

Los objetos pueden crearse de forma local o dinamicamente con punteros. En el primer caso se usa el '.' para adceder a sus miembros, en el otro caso se usa el '->'
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

milx86

Gracias por contestar.
Cita de: amchacon en 17 Marzo 2014, 20:04 PM
¿Vienes de Java? Lo digo por esto
No, apenas conozco C++. esa forma de implementar una pila la vi aqui http://casicodigo.blogspot.com/2012/10/pilas-en-c.html :
Código (cpp) [Seleccionar]

typedef nodo *PtrPila //Puntero tipo nodo, que luego lo inicializa a NULL

Y luego un puntero auxiliar:
Código (cpp) [Seleccionar]
ptrPila q = new (struct nodo);
Y para ahorrarme el "struct nodo" se me ocurrio hacer eso XD
Crear un tipo de dato puntero(nodoPtr) que apunte a un tipo de dato nodo. (Eso creo, pues si me a funcionado)
Pero bueno, no sabía que hiba contra la sintáxis de new  :P

Volviendo al código entonces sería algo asi:
Código (cpp) [Seleccionar]
nuevo->naipe.fig = 0;
Ya que 'naipe' no es un puntero  :-\
ahora mi duda es con respecto a los parentesis.
Código (cpp) [Seleccionar]
(nuevo->naipe).fig = 0;
ó
Código (cpp) [Seleccionar]
nuevo->(naipe.fig) = 0;
:huh: O no importa si lo pongo sin parentesis.
La abstracción es la clave para lidiar con la complejidad.

amchacon

En C++ no hace falta poner struct, eso es en C.

Con la sintaxis de new me refería a que no hace falta parentesis:
Código (cpp) [Seleccionar]
ptrPila* q = new nodo;

En cuanto a los parentesis:
Código (cpp) [Seleccionar]
nuevo->naipe.fig = 0;

Mal, fig es un objeto.

PD: Antes de empezar haciendo una pila. Deberías seguir algún tutorial de programación en C++, te faltan las bases del lenguaje.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

milx86

Creo que estoy aprendiendo en el orden y de la manera incorrecta.
Seguire tu consejo, Gracias.
La abstracción es la clave para lidiar con la complejidad.