stringtranslate.com

Tipo de datos compuestos

En informática , un tipo de datos compuestos o tipo de datos compuestos es cualquier tipo de datos que se puede construir en un programa utilizando los tipos de datos primitivos del lenguaje de programación y otros tipos compuestos. A veces se le llama estructura o tipo agregado , [1] aunque este ú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 structes la noción de C y C++ de un tipo compuesto, un tipo de datos que compone un conjunto fijo de campos o miembros etiquetados . Se llama así por la structpalabra clave utilizada al declararlos, que es la abreviatura de estructura o, más precisamente, estructura de datos definida por el usuario . [ cita necesaria ]

En C++, la única diferencia entre a structy una clase es el nivel de acceso predeterminado , que es privado para las clases y público para structs.

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 sin formato de structs. Para todos los efectos, los C++ structforman un superconjunto de C struct: prácticamente todos structlos C válidos son C++ válidos structcon la misma semántica.

Declaración

Una structdeclaración consta de una lista de campos, cada uno de los cuales puede ser de cualquier tipo. El almacenamiento total requerido para un structobjeto 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 * nombre_nombre ; char * apellido ; equilibrio flotante ; };          

define un tipo, denominadostruct Account . Para crear una nueva variable de este tipo, podemos escribir struct Account myAccount;que tiene un componente entero, al que se accede mediante myAccount.account_number, y un componente de punto flotante, al que se accede mediante myAccount.balance, así como los componentes first_namey last_name. La estructura myAccountcontiene los cuatro valores y los cuatro campos se pueden cambiar de forma independiente.

Dado que escribir struct Accountrepetidamente en código se vuelve engorroso, no es inusual ver una typedefdeclaración en código C que proporcione un sinónimo más conveniente para struct. Sin embargo, algunos [ ¿quién? ] Las guías de estilo de programación desaconsejan esto, alegando que puede ofuscar el tipo.

Por ejemplo:

typedef struct Cuenta_ { int número_cuenta ; char * nombre_nombre ; char * apellido ; equilibrio flotante ; } Cuenta ;            

En el código C++, typedefno es necesario porque los tipos definidos usando structya forman parte del espacio de nombres normal, por lo que se puede hacer referencia al tipo como struct Accounto simplemente Account.

Como otro ejemplo, se podría crear un tipo compuesto vectorial tridimensional que utilice el tipo de datos de punto flotante con:

estructura Vector { flotador x ; flotar y ; flotar z ; };        

Una variable nombrada velocitycon un Vectortipo compuesto se declararía como Vector velocity;miembros de los que velocityse accedería mediante una notación de puntos. Por ejemplo, velocity.x = 5;establecería el xcomponente de velocityigual a 5.

Asimismo, se podría crear una estructura de color usando:

Color de estructura { int sin signo rojo ; sin firmar int verde ; sin firmar en azul ; };           

En los gráficos 3D, normalmente debes realizar un seguimiento tanto de la posición como del color de cada vértice. Una forma de hacer esto sería crear un Vertextipo compuesto, utilizando los tipos compuestos Vectory creados anteriormente:Color

estructura Vértice { Posición del vector ; Color de color ; };      

diagrama de clases UML

Creación de instancias

Cree una variable de tipo struct Vertexusando el mismo formato que antes:Vertex v;

Acceso de miembros

Asigne valores a los componentes de vesta manera:

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 structes 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 necesaria ] 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 { largo x , y ; }; estructura ifoo_version_42 { largo x , y , z ; nombre del personaje ; largo a , b , c ; }; void operator_on_ifoo ( estructura ifoo_old_stub * ); estructura ifoo_version_42s ;. . . operar_on_ifoo ( & s );                        

funcionará correctamente.

Escriba la firma

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:

estructura typedef { int x ; int y ; } Punto ;       typedef double ( * Métrica ) ( Punto p1 , Punto p2 );      estructura typedef { Centro del punto ; doble radio ; Métrica métrica ; } Círculo ;         

Ver también

Referencias

  1. ^ Cómo, Denis. "El diccionario gratuito de informática en línea". foldoc.org . Consultado el 6 de febrero de 2023 .