Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda instanciando clases

Estas en el tema de Duda instanciando clases en el foro de C/C++ en Foros del Web. Según leía acá: http://www.mailxmail.com/curso/infor...capitulo18.htm Este es un tuto para clases y objetos. Código: class contador { public:leer() {return 1;} }; void main() { contador c; ...
  #1 (permalink)  
Antiguo 18/07/2007, 14:33
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Duda instanciando clases

Según leía acá:
http://www.mailxmail.com/curso/infor...capitulo18.htm

Este es un tuto para clases y objetos.

Código:
class contador
{
public:leer() {return 1;}
};
void main()
{
contador c;
contador *p=new(contador);
leer(); //error: función desconocida, no en ámbito
cout<<c.leer(); //correcto
cout<<p->leer(); //correcto
}

Pero no entiendo cual es la diferencia de instanciar una clase así:

Código:
contador c;
o así:
Código:
contador *p=new(contador);
Y lo otro, para acceder a los miembros, en el primer caso es con un punto . y en el segundo con flecha ->

Decía que tiene una sutil diferencia, cual?
__________________
Blog | Tecnosquad
  #2 (permalink)  
Antiguo 18/07/2007, 14:48
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 8 meses
Puntos: 47
Re: Duda instanciando clases

Creo que era así:

p->leer();
c.leer();

tienes dos objetos contador
  #3 (permalink)  
Antiguo 18/07/2007, 14:58
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Re: Duda instanciando clases

lo tengo claro... pero no entiendo cuales esa "sutil diferencia" que hay en las 2 formas.
__________________
Blog | Tecnosquad
  #4 (permalink)  
Antiguo 18/07/2007, 15:00
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 8 meses
Puntos: 47
Re: Duda instanciando clases

Ah ya, tu mismo ya lo tienes:

cout<<p->leer();

Ah la diferencia es que tienes una variable tipo contador "c" y un puntero tipo contador *p

Un puntero es una referencia a una dirección de memoria, en este caso la memoria es asignada dinámicamente y el puntero lo que tiene es la dirección de donde está el objeto. En el primer caso la memoria es asignada en direcciones seguidas
  #5 (permalink)  
Antiguo 18/07/2007, 15:03
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 8 meses
Puntos: 47
Re: Duda instanciando clases

Tu ejemplo es un caso sencillin... por lo que no estás "utilizando" la sutil diferencia de trabajar con punteros
  #6 (permalink)  
Antiguo 18/07/2007, 19:01
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Re: Duda instanciando clases

Entonces no se podría ocupar la flecha -> con el instanciado en una variable, y el punto . en el instanciado con punteros?
__________________
Blog | Tecnosquad
  #7 (permalink)  
Antiguo 18/07/2007, 21:50
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Duda instanciando clases

Cita:
Iniciado por ArrauKano Ver Mensaje
Entonces no se podría ocupar la flecha -> con el instanciado en una variable, y el punto . en el instanciado con punteros?
La diferencia es que en

contador c;

El objeto se crea desde que comienza el procedimiento en donde esta la declaracion, y este puede ser al comenzar el programa o una funcion(donde lo tengas declarado) y pues el constructor se ejecuta justo cuando se crea el objeto.
Y para accesar a sus funciones miembro o a datos miembro publicos usas el punto.

En caso de

contador *p=new contador;

Tienes un puntero en el que tu elijes exactamente el momento en que se crea el objeto. Asi puedes tener un puntero y solo usas la memoria necesaria cuando realmente lo necesites, como si ahorraras memoria.
Para accesar a los miembor de un puntero a un objeto usas el operador de referencia(creo que asi se llama) que es el "->".

La diferencia entre el punto y el -> es que el punto es como directo y el -> es para punteros ya que el puntero contiene la direccion y no los datos directamente.

Saludos
  #8 (permalink)  
Antiguo 19/07/2007, 00:50
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 1 mes
Puntos: 4
Re: Duda instanciando clases

ok, está claro entonces.
__________________
Blog | Tecnosquad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:57.