Estructura o Clase

04/02/2005 - 21:29 por Alberto | Informe spam
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias

Preguntas similare

Leer las respuestas

#6 Vyacheslav Popov
07/02/2005 - 12:30 | Informe spam
Privet Octavio kak dela?.

Me he quedado asombrado con la explicación. (por poco y me pierdo)

Según he entendido las clases y estructuras son como de siempre pero con una
ventaja de poder agrupar los eventos de estructura dentro de esta.

P.S. Ya ochen udivilsya kagda usnal chto ti zaconchil universitet v
Novosibirske.

Saludos.
Popov

"Octavio Hernandez" escribió en el mensaje
news:%
Vyacheslav,

VELOCIDAD (RENDIMIENTO) es la diferencia.

Imagínate que tienes un método en el que hay una variable local 'c' de
tipo 'Complejo';

void f()
{
int c = new Complejo(3,5);
// más cosas ...
}

De toda la vida, para las variables locales se utiliza la pila (stack),
que es un mecanismo muy cómodo porque las llamadas a funcoines en un
programa siguen la disciplina de una pila (la última función llamada es la
primera que termina).

Cuando el control entre en la función f() y se construya el objeto c:
a) si Complejo es una estructura, la memoria para sus dos campos se
reservará EN LA PROPIA PILA Cualquier acceso a la variable utilizará
direcciones relativas en la propia pila.
b) si Complejo es una clase, se construirá un objeto Complejo EN EL
HEAP(MEMORIA DINAMICA) (objeto que después será basura hasta que el
recolector lo recoja). En la pila se almacenará sólo una REFERENCIA
(puntero) al objeto dinámico. Para acceder a un campo de la variable, hará
falta acceder al objeto en memoria a través de la referencia.

Por lo general (y siempre en caso de que la clase sea pequeña y sólo
contenga tipos valor), a) es mucho más eficiente que b).
Por esa razón es que ciertas clases de .NET, como por ejemplo Point, son
estructuras y no clases. Si Point fuera una clase, ciertos algoritmos
gráficos podrían ser mucho más lentos y consumirían mucho más memoria...

¿OK?

Privet,

Octavio

"Vyacheslav Popov" escribió en el mensaje
news:%
Hola Octavio.

Entonces, ¿cual es diferencia? entre:

struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

y

class Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Se me escapa la idea de estructuras o registros... pues, ¿porque no lo
quitan directamente?... y menos dolores de cabeza..

Saludos.
Popov

"Octavio Hernandez" escribió en el mensaje
news:
Alberto,

Las estructuras son tipos-valor, y las variables de tipo estructura se
almacenan directamente en el stack (caso de variables locales) o inline
dentro de los objetos u otras estructuras, cuando forman parte de ellas.
Las clases, por el contrario, son tipos-referencia. Sus instancias se
crean siempre en el heap (memoria dinámica) y las variables de tipos de
clase contienen únicamente una referencia (especie de puntero) a la
variable.

Las estructuras se deben utilizar fundamentalmente para definir tipos
formados por unos pocos campos que sean todos de tipos-valor. Esto
garantiza que ofrezcan un mejor rendimiento. Ejemplos típicos son:

struct Punto { int x; int y; }
struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Como ves, a las estructuras se puede asociar constructores, métodos,
niveles de visibilidad y prácticamente casi todo lo que pueden tener las
clases.

Slds - Octavio


"Alberto" escribió en el mensaje
news:
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida