Estructuras y uniones
Los tipos definidos por el usuario se definen como estructuras, uniones, enumeraciones o clases. Las estructuras y uniones son tipos de clase (clase, es el tipo de dato fundamental en la programación orientada a objetos).
El tipo struct permite agregar componentes de diferentes tipos y con un solo nombre. Las estructuras en C++ se declaran como en C:
struct datos
{
int num;
char nombre[20];
};
El nuevo tipo de dato definido puede tener instancias que se declaran:datos persona; //declaración C++struct datos persona; // declaración C
En C++ debe evitarse el uso de typedef.
El mismo convenio aplicado a las estructuras, se aplica a las uniones.
Un tipo especial de unión se ha incorporado a C++ :unión anónima. Una unión anónima declara simplemente un conjunto de elementos que comparten la misma dirección de memoria; no tiene nombre identificador y se puede acceder directamente a los elementos por su nombre.
Un ejemplo:
union
{
int i;
float f;
};
Tanto i como f comparten la misma posición de memoria. A los miembros de esta unión se puede acceder directamente en el ámbito en que está declarada. Por tanto, en el ejemplo, la sentencia i=3 sería aceptable.
Las uniones anónimas son interesantes en el caso en que se defina una unión en el interior de una estructura:
struct registro
{
union
{
int num;
float salario;
};
char *telefono;
};
registro empleado;
Para acceder al nombre de un campo dentro de esta estructura:
empleado.sueldo;
Asignación dinámica de memoria: new y delete
En C la asignación dinámica de memoria se manipula con las funciones malloc() y free(). En C++ se define un método de hacer asignación dinámica utilizando los operadores new y delete.
En C:
void main()
{
int *z;
z= (int*) malloc(sizeof(int));
*z=342;
printf("%d\n",*z);
free(z);
}
En C++:
void main()
{
int *z=new int;
*z=342;
cout << z;
delete z;
}
El operador new está disponible directamente en C++, de modo que no se necesita utilizar ningún archivo de cabecera; new se puede utilizar con dos formatos:new tipo // asigna un único elemento
new tipo[num_eltos] // signa un array
Si la cantidad de memoria solicitada no está disponible, el operador new proporciona el valor 0. El operador delete libera la memoria signada con new.
delete variable
delete [n] variable
new es superior a malloc por tres razones:
1.- new conoce cuánta memoria se asigna a cada tipo de variable.
2.- malloc() debe indicar cuánta memoria asignar.
3.- new hace que se llame a un constructor para el objeto asignado y malloc no puede.
delete produce una llamada al destructor en este orden:
1. Se llama al destructor
2. Se libera memoria
delete es más seguro que free() ya que protege de intentar liberar memoria apuntada por un puntero nulo.
Hay 454 opiniones. Opina sobre este curso.
| Cursos | Valoración | Alumnos | Vídeo | |
|---|---|---|---|---|
|
Conmutación. Líneas de acceso (primera parte) En este curso sobre líneas de acceso conmutado aprenderás qué es la conmutación y por qué surge. Conocerás la evolución histórica de estas tecnologías y los principales s... [31/10/08] |
|
732 | ||
|
Programar con Flash MX Macromedia creo Flash 3, y con el introdujo un, hasta entonces, desconocido concepto en el mundo Flash, la programación. Primitivos play, stop y gotoAndPlay poblaron ento... [16/03/05] |
|
15.613 | ||
|
Programa con Delphi Con este curso aprenderemos a programar con delphi, un lenguaje de programación visual, con el que podrás aprender de una manera rápida e intuitiva.... [05/05/05] |
|
5.448 | ||
Publicar en
del.icio.us
digg
meneame