4.1.1 Entidades
§1 Presentación
En relación con los conceptos que aquí nos incumben, consideramos que una entidad ( 1.2.1) a la que corresponde una zona de almacenamiento, es un objeto, y que el contenido de esta zona de memoria puede ser de dos tipos:
- Un valor (o conjunto de valores) fijo o variable. Lo denominamos entidad-valor u objeto-valor.
- Un algoritmo con información sobre manipulación de datos. Lo denominamos entidad-algoritmo o simplemente algoritmo.
Respecto a los objetos-valor, una posible clasificación podría dividirlos en las siguientes categorías:
- Agregados
- matriz
- estructura
- unión
- clase, unión.
- Funciones
- Escalares
- Aritmético
- Enumeración
- Booleano
- Puntero
- Referencia
- void
void ( 2.2.1)
es un tipo especial con un valor muy particular: "ausencia de valor". Los escalares son de
características tales que su "valor" no pueden ser descompuestos en partes más pequeñas, por ejemplo, un entero; un
valor lógico (cierto-falso), etc. Las funciones (
4.4) son principalmente algoritmo, ya que están asociadas a ciertas operaciones (cierta computación), pero
por convención se les puede asignar un "valor", es el que devuelven (puede ser
void). Por su parte los
agregados comparten la característica de que su "valor" puede ser
descompuesto en elementos más simples (escalares).
§2 El papel de las declaraciones
Haciendo un símil social, podríamos decir que las declaraciones son las encargadas de "presentar" al compilador cualquier entidad que deba existir en el programa. Son por tanto, el Chambelán de la sociedad C++. Como en el caso de las presentaciones sociales, esta presentación no se reduce a indicar el nombre; también puede señalarse algunas características o atributos de la entidad. Naturalmente estos atributos no pueden ser los mismos en todos los casos (los objetos no tienen los mismos que las funciones) aunque desde luego todos tienen un identificador.
§3 Atributos
Todas las declaraciones de entidades contienen un identificador asociado que se utiliza para acceder al objeto. Puede ser un identificador simple (nombre), o una expresión compleja que represente unívocamente al objeto ( 2.1.1 ). Cualquier intento de utilizar una declaración sin un nombre es un error, aunque el nombre no tiene que responder necesariamente a un objeto o función. Ejemplo:
extern int; // Error!!
char*; // Error!!
char* cptr; // Ok. cptr nombre de puntero
class C; // Ok. C nombre de clase
typedef unsigned int UINT; // Ok. UINT alias para un tipo conocido
Además del identificador, las declaraciones de funciones pueden incluir
ciertos atributos: inline
( 4.11.2a);
virtual ( 4.11.8a) y
explicit ( 4.11.2d1).
Por su parte, las declaraciones de objetos-valor pueden incluir atributos de diversos tipos [1]:
Relativos al tipo de objeto: Su mero conocimiento ya anuncia al compilador algunas propiedades y operaciones que se pueden ejecutar con el objeto ( 2.1 ). Entre otros puede incluir los siguientes: char, wchar_t, bool, short, int, long, signed, unsigned, float, double, void.
Relativos al tipo de almacenamiento. Determina el sitio en que se guarda el objeto y su duración ( 2.1.3 ). Puede ser alguno de los siguientes: auto, register, static, extern y mutable.
Relativos al tipo de enlazado: extern.
Relativos a propiedades diversas: friend; typedef; asm.
Relativo a su variabilidad (capacidad de que el "valor" pueda o no cambiar a lo largo del programa): const.
Nota: observe que los atributos identificador y almacenamiento son distintos, lo que permite establecer una interesante disquisición respecto a si un mismo objeto. Por ejemplo una variable, puede estar referenciado por dos identificadores distintos (que se refieren a la misma región de memoria). En la mayoría de lenguajes de programación esta distinción, entre identificador y almacenamiento, está perfectamente establecida, y suelen proporcionar mecanismos sintácticos para que dos identificadores puedan referirse al mismo almacenamiento.
[1] La presente clasificación es meramente orientativa; no pretende ser una clasificación exhaustiva de los atributos de las entidades C++ (para mayor detalle debe consultarse la gramática Gramática).