En informática , un tipo de datos compuesto o tipo de datos compuesto es cualquier tipo de datos que puede ser construido en un programa utilizando el lenguaje de programación que está tipos de datos primitivos y otros tipos de compuestos. A veces se le llama estructura o tipo de datos agregados , [1] aunque el último término también puede referirse a matrices , listas , etc. El acto de construir un tipo compuesto se conoce como composición . Los tipos de datos compuestos a menudo se contrastan con las variables escalares .
Estructuras y clases C / C ++
A struct
es C 's y C ++ noción s' de un tipo compuesto, un tipo de datos que compone un conjunto fijo de etiquetados campos o miembros . Se llama así debido a la struct
palabra clave utilizada para declararlos, que es la abreviatura de estructura o, más precisamente, estructura de datos definida por el usuario . [ cita requerida ]
En C ++, la única diferencia entre una struct
y una clase es el nivel de acceso predeterminado , que es privado para clases y público para struct
s.
Tenga en cuenta que, si bien las clases y la class
palabra clave eran completamente nuevas en C ++, el lenguaje de programación C ya tenía un tipo burdo de struct
s. A todos los efectos, los C ++ struct
forman un superconjunto de C struct
s: prácticamente todos los C struct
válidos son C ++ válidos struct
con la misma semántica.
Declaración
Una struct
declaración consta de una lista de campos, cada uno de los cuales puede tener cualquier tipo. El almacenamiento total requerido para un struct
objeto es la suma de los requisitos de almacenamiento de todos los campos, más cualquier relleno interno .
Por ejemplo:
estructura Cuenta { int número_cuenta ; char * first_name ; char * apellido ; equilibrio de flotación ; };
define un tipo, que se refiere a como struct Account
. Para crear una nueva variable de este tipo, podemos escribir struct Account myAccount;
que tenga un componente entero, al que se accede por myAccount.account_number
, y un componente de punto flotante, al que se accede por myAccount.balance
, así como los componentes first_name
y last_name
. La estructura myAccount
contiene los cuatro valores y los cuatro campos se pueden cambiar de forma independiente.
Dado que escribir struct Account
repetidamente en código se vuelve engorroso, no es inusual ver una typedef
declaración en el código C para proporcionar un sinónimo más conveniente para struct
.
Por ejemplo:
typedef struct Account_ { int account_number ; char * first_name ; char * apellido ; equilibrio de flotación ; } Cuenta ;
En el código C ++, typedef
no es necesario porque los tipos definidos mediante struct
ya forman parte del espacio de nombres normal, por lo que se puede hacer referencia al tipo como struct Account
o simplemente Account
.
Como otro ejemplo, un tipo de vector compuesto tridimensional que usa el tipo de datos de punto flotante podría crearse con:
struct Vector { float x ; flotar y ; flotar z ; };
Una variable nombrada velocity
con un Vector
tipo compuesto se declararía como Se accedería a los Vector velocity;
miembros del velocity
mediante una notación de puntos. Por ejemplo, velocity.x = 5;
establecería el x
componente de velocity
igual a 5.
Asimismo, se podría crear una estructura de color usando:
struct Color { unsigned int red ; unsigned int green ; unsigned int blue ; };
En los gráficos 3D, normalmente debe realizar un seguimiento de la posición y el color de cada vértice. Una forma de hacer esto sería crear un Vertex
tipo compuesto, utilizando los tipos compuestos Vector
y creados previamente Color
:
struct Vertex { Posición del vector ; Color de color ; };
Instanciación
Cree una variable de tipo struct Vertex
usando el mismo formato que antes:Vertex v;
Acceso de miembros
Asignar valores a los componentes de v
así:
v . posición . x = 0,0 ; v . posición . y = 1,5 ; v . posición . z = 0,0 ; v . color . rojo = 128 ; v . color . verde = 0 ; v . color . azul = 255 ;
Subtipo primitivo
El uso principal de struct
es para la construcción de tipos de datos complejos, pero a veces se usa para crear subtipos estructurales primitivos . Por ejemplo, dado que el Estándar C [ cita requerida ] requiere que si dos estructuras tienen los mismos campos iniciales, esos campos se representarán de la misma manera, el código
struct ifoo_old_stub { long x , y ; }; struct ifoo_version_42 { long x , y , z ; char * nombre ; largo a , b , c ; }; void operar_on_ifoo ( struct ifoo_old_stub * ); struct ifoo_version_42 s ; . . . operar_on_ifoo ( & s );
funcionará correctamente.
Firma de tipo
Las firmas de tipo (o tipos de función ) se construyen a partir de tipos primitivos y compuestos, y pueden servir como tipos en sí mismos al construir tipos compuestos:
typedef struct { int x ; int y ; } Punto ;typedef double ( * Métrico ) ( Punto p1 , Punto p2 );typedef struct { Centro del punto ; radio doble ; Métrica métrica ; } Círculo ;
Ver también
Referencias
- ^ Howe, Denis. "El Diccionario de Computación en Línea Libre" . Dictionary.com . Consultado el 1 de febrero de 2016 .