Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   C/C++ (http://www.forosdelweb.com/f96/)
-   -   Duda instanciando clases (http://www.forosdelweb.com/f96/duda-instanciando-clases-506338/)

ArrauKano 18/07/2007 14:33

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?

Developer9 18/07/2007 14:48

Re: Duda instanciando clases
 
Creo que era así:

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

tienes dos objetos contador

ArrauKano 18/07/2007 14:58

Re: Duda instanciando clases
 
lo tengo claro... pero no entiendo cuales esa "sutil diferencia" que hay en las 2 formas.

Developer9 18/07/2007 15:00

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

Developer9 18/07/2007 15:03

Re: Duda instanciando clases
 
Tu ejemplo es un caso sencillin... por lo que no estás "utilizando" la sutil diferencia de trabajar con punteros

ArrauKano 18/07/2007 19:01

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?

Instru 18/07/2007 21:50

Re: Duda instanciando clases
 
Cita:

Iniciado por ArrauKano (Mensaje 2072254)
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

ArrauKano 19/07/2007 00:50

Re: Duda instanciando clases
 
ok, está claro entonces.


La zona horaria es GMT -6. Ahora son las 00:32.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.