Una de las dudas mas comunes, y que de hecho me costo bastante entender, es cuando usar struct o class, todos casi como si fuera una ley usamos unicamente class... pero, cuando son utiles los structs?
Primero que todo, debemos marcar 2 diferencia cruciales
1.-Herencia: Un struct no puede ser heredado por otro struct class, aunque si puede heredar interfaces, class como sabran, si lo permite.
2.-Bien aqui es cuando hago notar que no soy alguien que lea todo el tiempo libros, si no que aprendo de la practica y algunos articulos. las class, son en si referencias a un punto en la memoria, los structs si bien lo son, actuan de una manera diferente frente a algunas situaciones, la mas importante es el ser parametro de algun metodo, mientras class lo que hace es pasar una referencia a su ubicacion en la memoria, un struct es copiado completamente
quiere decir que si tenemos lo siguiente
class MiClase
{
public int X;
}
struct MiStruct
{
public int X
}
supongamos creamos una instancia de la clase llamada "classInst" y del struct "structInst", ambos con valor de "X" = 1000
teniendo los siguientes metodos
void TestClass(MiClase clase)
{
clase.X = 2000;
}
void TestStruct(MiStruct estructura)
{
estructura.X = 2000;
}
que pasa con classInst luego de
TestClass(classInst); ?
y con el struct?
al imprimir en la consola tenemos el siguiente resultado
classInst.X = 2000;
structInst.X = 1000;
como dijimos arriba, se debe a que al pasar un struct como parametro, se crea una copia del struct, la clase por su lado es la misma, solo pasa una referencia.
En conclusion:
Struct se debe usar practicamente nunca! ^^ pero es buena practica usarlo en combinacion de los casos que:
-La tamaño de la informacion contenida bordea los 20 bytes.
-El paso del struct como parametros es casi nulo
-Las variables dentro son de preferencia readonly, o cambia pocas veces.
Dudas sobre esto.. Ask ;) link a la derecha
los datos de una estructura son siempre públicos no hay necesidad de escribir
ResponderEliminarpublic int X;
Otra cosa, si esa es una ventaja de las clases, que automáticamente se pasan por referencia, pero no es así con las variables normales de tipo int, bool, char, ... ,etc para las cuales tendrias que escribir
template
void Testvar( T &variable);
osea que el struct se comporta mas como lo normal, como una variable
void TestStruct(MiStruct &estructura)
por eso estoy en desacuerdo a lo que dijiste al final "Struct se debe usar practicamente nunca!"
Lo que hay que tener en cuanta en las struct es cuando se usan tablas a dentro porque hace una copia superficial, solo se copia la referencia haciendo que sea el mismo objeto en ambas struct...
ResponderEliminarAlgo a favor de las Struct es que son mas rapidas que las clases una de las recomendaciones para que tu programa sea mas rapido es que en cuanto puedas uses mejor struct y no clases.
ResponderEliminarSaludos