Conceptos Esenciales de Clases y Objetos en C++

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,19 KB

Secciones de una Clase en C++

Las clases en C++ se dividen en secciones para controlar la visibilidad y el acceso a sus miembros (funciones y datos).

Sección Privada

Solo las funciones miembro de la clase pueden acceder a los miembros declarados en esta sección. Las clases descendientes (heredadas) tienen denegado el acceso a los miembros privados de una clase base.

Sección Protegida

Solo las funciones miembro de una clase y sus clases descendientes pueden acceder a sus miembros declarados en esta sección.

Sección Pública

Especifica miembros que son visibles y accesibles desde cualquier parte del programa, incluyendo funciones externas a la clase y funciones miembro de otras clases.

Reglas de las Secciones de Clase

  1. Las secciones de la clase (private, protected, public) pueden aparecer más de una vez en cualquier orden dentro de la definición de la clase.
  2. Si no se especifica ninguna sección al inicio de la definición de la clase, C++ trata a los miembros declarados por defecto como privados.
  3. Deberá evitar agrupar datos miembro en la sección pública a menos que tal declaración simplifique totalmente su diseño. Los datos miembro son puestos generalmente en la sección protegida para permitir que las funciones miembro de las clases dependientes (descendientes) tengan acceso a ellas, manteniendo la encapsulación frente al exterior.

Formas de Crear un Objeto en C++

Existen varias maneras de instanciar un objeto de una clase:

  • Declarar un objeto global o local (temporal).
  • Invocar al operador new para asignación dinámica de memoria.
  • Llamar explícitamente a un constructor (menos común en la práctica diaria, pero posible).

Tipos de Constructores

Los constructores son funciones miembro especiales que se llaman automáticamente cuando se crea un objeto de una clase. Se utilizan para inicializar el estado del objeto.

Constructor por Omisión

Sintaxis típica: NombreClase();

Cuando una clase no especifica ningún constructor, el compilador crea uno por omisión (si es necesario). Si el objeto creado es global o estático, el constructor por omisión implícito inicializa en ceros los datos miembro numéricos y a nulos los datos miembro alfanuméricos (punteros, etc.). Si el objeto es local (automático), lo inicializa con valores indeterminados ("basura").

Constructor Explícito por Argumentos

Sintaxis típica: NombreClase(argumentos);

Permite inicializar un objeto con valores específicos pasados como argumentos al momento de su creación. Los valores deben especificarse en una lista a continuación de la declaración del objeto.

Constructor Explícito con Argumentos por Omisión

Sintaxis típica: NombreClase(argumentos inicializados = valor_por_defecto);

Una forma de reducir el número de constructores sobrecargados es usando constructores con argumentos que tienen valores por omisión. Esto permite llamar al mismo constructor con diferentes números de argumentos.

Constructor Copia

Sintaxis típica: NombreClase(const NombreClase& objeto_original);

Otra forma de crear un objeto es inicializándolo con el estado de otro objeto existente de la misma clase en el momento de su declaración (cuando se crea). Este constructor se invoca automáticamente en situaciones como pasar objetos por valor a funciones o devolver objetos por valor.

Inicialización Directa (Forma Alternativa)

Otra forma de inicializar un objeto es asignándole otro objeto de la misma clase en su momento de la declaración. Esto a menudo invoca al constructor copia o puede ser optimizado por el compilador (copy elision).

Operador new

El operador new permite asignar memoria dinámicamente para un objeto o para un arreglo de objetos en el área de memoria de almacenamiento libre (free store o heap). Devuelve un puntero al objeto o al primer elemento del arreglo del tipo especificado que hace referencia al espacio reservado.

Destructor del Objeto

Existe una función especial que permite destruir cada objeto construido, liberando así la memoria que ocupa. Un objeto es destruido automáticamente al salir del ámbito en el cual ha sido construido (para objetos locales/automáticos) o cuando se usa el operador delete (para objetos creados con new).

Destructor

Sintaxis típica: ~NombreClase();

Es una función miembro especial de una clase que se utiliza para realizar tareas de limpieza antes de que un objeto de esa clase sea eliminado, liberando la memoria que ocupa y otros recursos asociados.

Objeto this

this es un puntero que se pasa automáticamente a cualquier función miembro no estática cuando se invoca. Es un puntero constante que apunta al objeto para el cual se llamó a la función miembro. Por lo tanto, la función miembro recibe automáticamente un puntero al objeto actual.

PUTOS

Entradas relacionadas: