Espacios de nombres
Variantes
Acciones

Clases

De cppreference.com
< cpp‎ | language
 
 
 
 

Una clase es un tipo definido por el usuario.

Un tipo clase se define por medio del especificador de clase, que aparece en sec-decl-especificadores de la sintaxis de declaración. El especificador de clase tiene la siguiente sintaxis:

clave-de-clase atrib nombre-de-la-clase { especificación-de-miembros } (1)
clave-de-clase atrib nombre-de-la-clase : lista-de-especificadores-base { especificación-de-miembros } (2)
clave-de-clase - Ya sea class, struct, o union
atrib(C++11) - Secuencia opcional de cualquier número de atributos
nombre-de-la-clase - El nombre de la clase que se define. Opcionalmente antepuesto por especificador-de-nombre-anidado (secuencia de nombres y operadores de resolución de ámbito que terminan con el operador de resolución de ámbito), opcionalmente seguido de la palabra clave final. El nombre puede omitirse. En tal caso, la clase no tiene nombre (notar que una clase sin nombre no puede marcarse con final).
lista-de-especificadores-base - Lista una o más clases base y la modalidad de herencia utilizada para cada una de ellas(véase clase derivada)
especificación-de-miembros - Lista de los especificadores de acceso, objetos miembro y declaraciones y definiciones de funciones miembro (véase definición de clase).

Las claves de clase struct yclass son indistinguibles en C++, excepto que la modalidad de acceso por defecto y la modalidad de herencia es pública si una declaración de la clase utiliza la clave de clase struct, y privada si la declaración de la clase utiliza la clave de clase class. Tanto class como struct pueden usarse en una definición de clase.

El uso de la clave de clase union resulta en una definición de unión, que define una clase que mantiene sólo uno de sus datos miembro a la vez.

Una clase puede tener los siguientes tipos de miembros

a) Datos miembro no estáticos, incluyendo campos de bits.
b) Datos miembro estáticos (static).
2) Funciones miembro.
b) Funciones miembro estáticas (static).
3) Tipos miembro (tipos anidados).
a) Clases anidadas y enumeraciones definidas dentro de la definición de la clase.
b) Alias de tipos existentes, definidos con typedef, o declaraciones de tipo alias
c) El nombre de la clase dentro de su propia definición actúa como un alias de tipo miembro de sí misma con el propósito de búsqueda (excepto cuando se usa para denominar a un constructor). Ésto se conoce como nombre-de-clase-inyectado
4) Enumeradores de todas las enumeraciones sin ámbito definidas dentro de la clase.
5) Plantillas miembro (plantillas de variable (desde C++14), plantillas de clase o plantillas de función) pueden aparecer en el cuerpo de cualquier clase, estructura o unión no local.

Todos los miembros se definen a la vez en la definición de la clase y no pueden agregarse a una clase que ya se ha definido (a diferencia de los miembros de los espacios de nombres).

Un miembro de una clase T no puede usar a T como su nombre si el miembro es un dato miembro estático, una función miembro, un tipo miembro, una plantilla miembro, , un enumerador de una enumeración sin ámbito, un miembro de un miembro de una unión anónima. Sin embargo, un dato miembro no estático puede usar el nombre T, siempre y cuando no existan constructores declarados por el usuario.

Una clase con al menos una función miembro virtual declarada o heredada es polimórfica. Los objetos de este tipo son objetos polimorfos y tienen información de tipo en tiempo de ejecución almacenado como parte de la representación del objeto, que se puede consultar con dynamic_cast y typeid. Las funciones miembro virtuales participan en la vinculación dinámica.

Una clase con al menos una función miembro virtual pura es una clase abstracta. No se pueden crear objetos de este tipo.

Una clase con un constructor constexpr es un LiteralType: objetos de este tipo pueden manipularse mediante funciones constexpr en tiempo de compilación.

Algunas funciones miembro son especiales: bajo ciertas circunstancias se definen por el compilador, inclusive si no se definen por el usuario. Son: