C++ Clase y objeto con ejemplo

⚡ Resumen inteligente

Clases y objetos en C++ Constituyen la base de la programación orientada a objetos, donde una clase define un modelo de datos y funciones miembro, y un objeto es una instancia concreta creada a partir de ese modelo.

  • 🔷 Plan de clase: A C++ La clase agrupa miembros de datos y funciones miembro en un tipo definido por el usuario.
  • 🔑 Modificadores de acceso: Las palabras clave privadas, públicas y protegidas controlan dónde se puede acceder a los miembros de la clase.
  • 🧱 Instanciación de objetos: Se crea un objeto a partir de una clase utilizando la sintaxis nombre-de-clase nombre-de-objeto.
  • 👉 Acceso para miembros: El operador punto accede a los miembros públicos, mientras que las funciones miembro manipulan los datos almacenados.
  • ⚙️ Constructores: Los constructores inicializan los objetos automáticamente, y los destructores los liberan cuando salen del ámbito de aplicación.
  • 🤖 Asistencia de IA: GitHub Copilot y asistentes de IA similares generan definiciones de clases y constructores a partir de un comentario breve.

C++ Clase y Objeto

¿Qué es una clase?

A C++ La clase combina datos y métodos para manipular los datos en uno. Las clases también determinan las formas de los objetos. Los datos y métodos contenidos en una clase se conocen como miembros de clase. Una clase es un tipo de datos definido por el usuario. Para acceder a los miembros de la clase, usamos una instancia de la clase. Puedes ver una clase como un modelo para un objeto.

Una clase puede servir como prototipo de una casa. Muestra la ubicación y las dimensiones de puertas, ventanas, pisos, etc. A partir de estas descripciones, podemos construir una casa. La casa se convierte en el objeto. Es posible crear muchas casas a partir del prototipo. Asimismo, es posible crear muchos objetos a partir de una clase.

C++ clase como un plano para objetos

En la figura anterior, tenemos un prototipo de casa unifamiliar. A partir de este prototipo hemos creado dos casas con características diferentes.

Teniendo en cuenta la idea de una clase como un modelo a seguir, el siguiente paso es ver cómo se declara en el código.

Declaración de clase

In C++Una clase se define utilizando la palabra clave `class`. A continuación, debe ir el nombre de la clase. El cuerpo de la clase se añade entre llaves `{ }`.

Sintaxis

class class-name
   {
   // data
   // functions
   };
  • El nombre de la clase es el nombre que se asignará a la clase.
  • El en son los datos de la clase, normalmente declarados como variables.
  • El funciones son las funciones de clase.

Declarar el nombre y el cuerpo de la clase plantea naturalmente la cuestión de quién puede usar cada miembro.

Palabras clave públicas y privadas

Debes haberte encontrado con estas dos palabras clave. Son modificadores de acceso.

Privado:

Cuando la palabra clave privada se utiliza para definir una función o clase, se vuelve privada. Sólo se puede acceder a ellos desde dentro de la clase.

Público:

La palabra clave pública, por otro lado, hace públicos los datos/funciones. Estos son accesibles desde fuera de la clase.

Una vez que existe una clase, se pueden crear objetos a partir de ella, de forma muy similar a como se crean variables a partir de un tipo de dato.

Definición de objeto

Los objetos se crean a partir de clases. Los objetos de clase se declaran de forma similar a como se declaran las variables. Primero debe ir el nombre de la clase, seguido del nombre del objeto. El objeto es del tipo de clase.

Sintaxis

class-name object-name;
  • El nombre de la clase es el nombre de la clase a partir de la cual se creará un objeto.
  • El nombre-objeto es el nombre que se asignará al nuevo objeto.

Este proceso de creación de un objeto a partir de una clase se conoce como creación de instancias.

Una vez creado un objeto, se puede acceder a sus miembros públicos directamente mediante un operador sencillo.

Acceso a miembros de datos

Para acceder a los miembros públicos de una clase, utilizamos el operador (.)punto. Estos son miembros marcados con el modificador de acceso público.

Ejemplo

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

Salida:

C++ Acceso a miembros de datos públicos Ejemplo 1 de salida

Aquí hay una captura de pantalla del código:

C++ Acceso a miembros de datos públicos Ejemplo 1 de código

Code Explicación:

  1. Incluya el archivo de encabezado iostream en nuestro código para poder utilizar sus funciones.
  2. Incluyendo el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
  3. Declare una clase llamada Teléfono.
  4. Usar el modificador de acceso público para marcar las variables que estamos a punto de crear como de acceso público.
  5. Declarar el costo variable de un tipo de datos doble.
  6. Declare una variable entera llamada slots.
  7. Fin del cuerpo de la clase.
  8. Llamando a la función principal(). La lógica del programa debe agregarse dentro de su cuerpo.
  9. Cree un objeto llamado Y6 de tipo Teléfono. Esto se llama creación de instancias.
  10. Cree un objeto llamado Y7 de tipo Teléfono. Esto se llama creación de instancias.
  11. Acceda al costo variable/miembro de la clase Teléfono usando el objeto Y6. El valor se establece en 100.0. El coste de Y6 ahora está fijado en 100.0.
  12. Acceda a las ranuras de variables/miembros de la clase Teléfono usando el objeto Y6. El valor está establecido en 2. Las ranuras para Y6 ahora están configuradas en 2.
  13. Acceda al costo variable/miembro de la clase Teléfono usando el objeto Y7. El valor se establece en 200.0. El coste de Y7 ahora está fijado en 200.0.
  14. Acceda a las ranuras de variables/miembros de la clase Teléfono usando el objeto Y7. El valor está establecido en 2. Las ranuras para Y7 ahora están configuradas en 2.
  15. Imprime el costo de Y6 en la consola junto con otro texto.
  16. Imprime el costo de Y7 en la consola junto con otro texto.
  17. Imprima el número de ranuras para Y6 junto con otro texto.
  18. Imprima el número de ranuras para Y7 junto con otro texto.
  19. El programa debe devolver un valor al finalizar con éxito.
  20. Fin del cuerpo de la función main().

Los miembros públicos tienen acceso a código externo, pero los miembros privados siguen reglas de acceso mucho más estrictas.

¿Qué es una clase privada?

Solo se puede acceder a los miembros de la clase marcados como privados mediante funciones definidas dentro de la clase. Cualquier objeto o función definido fuera de la clase no puede acceder a dichos miembros directamente. A un miembro de una clase privada solo se accede mediante funciones de miembro y amigo.

Ejemplo

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

Salida:

C++ Ejemplo 2 de salida de miembro de clase privada

Aquí hay una captura de pantalla del código:

C++ Miembro de clase privada Ejemplo 2 de código

Code Explicación:

  1. Incluya el archivo de encabezado iostream en nuestro código para usar sus funciones.
  2. Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
  3. Crea una clase llamada ClassA.
  4. Utilice el modificador de acceso público para marcar el miembro de la clase que se creará como de acceso público.
  5. Cree la función denominada set_a() que toma un valor entero val.
  6. Cree una función llamada get_a().
  7. Utilice el modificador de acceso privado para marcar el miembro de la clase que se creará como de acceso privado.
  8. Declare una variable entera llamada a.
  9. Fin del cuerpo de la clase.
  10. Utilice el nombre de la clase y el operador de resolución de alcance para acceder a la función get_a(). Queremos definir qué hace la función cuando se invoca.
  11. La función get_a() debería devolver el valor de la variable a cuando se invoca.
  12. Fin de la definición de la función get_a().
  13. Utilice el nombre de la clase y el operador de resolución de alcance para acceder a la función set_a(). Queremos definir qué hace la función cuando se invoca.
  14. Asignando el valor de la variable val a la variable a.
  15. Fin de la definición de la función set_a().
  16. Llame a la función principal(). La lógica del programa debe agregarse dentro del cuerpo de esta función.
  17. Crea una instancia de ClassA y asígnale el nombre a.
  18. Utilice la instancia de clase anterior y la función set_a() para asignar un valor de 20 a la variable a.
  19. Imprimiendo algo de texto junto al valor de la variable a en la consola. El valor de la variable a se obtiene llamando a la función get_a().
  20. El programa debe devolver valor una vez completado con éxito.
  21. Fin del cuerpo de la función main().

Los miembros protegidos se sitúan entre lo privado y lo público, lo que añade una capacidad clave para la herencia.

¿Qué es una clase protegida?

Los miembros de la clase marcados como protegidos tienen una ventaja sobre los marcados como privados. Se puede acceder a ellos mediante funciones dentro de la clase de su definición. Además, se puede acceder a ellos desde clases derivadas.

Ejemplo

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

Salida:

C++ Ejemplo 3 de salida de miembro de clase protegido

Aquí hay una captura de pantalla del código:

C++ Herencia de clases protegidas Ejemplo 3 de código

Code Explicación:

  1. Incluya el archivo de encabezado iostream en nuestro código para usar sus funciones.
  2. Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
  3. Cree una clase llamada ParentClass.
  4. Utilice el modificador de acceso protegido para marcar el miembro de la clase que se creará como protegido.
  5. Cree una variable entera llamada valor.
  6. Fin del cuerpo de la clase.
  7. Cree una nueva clase llamada ChildClass que herede ParentClass.
  8. Utilice el modificador de acceso protegido para marcar el miembro de la clase que se creará como accesible para las clases secundarias.
  9. Cree la función denominada setId() que toma un valor entero x.
  10. Asignar el valor de la variable x al valor de la variable.
  11. Fin de la definición de la función setId().
  12. Cree una función llamada displayValue().
  13. Imprima el valor de la variable denominada valor en la consola junto con otro texto.
  14. Fin del cuerpo de la función displayValue().
  15. Fin del cuerpo de la clase denominada ChildClass.
  16. Llame a la función principal(). La lógica del programa debe agregarse dentro del cuerpo de esta función.
  17. Cree una instancia de ChildClass y asígnele el nombre c.
  18. Utilice la instancia de clase anterior y la función setId() para asignar un valor de 21 a la variable x.
  19. Utilice la instancia de clase anterior para llamar a la función denominada displayValue().
  20. El programa debe devolver valor una vez completado con éxito.
  21. Fin del cuerpo de la función main().

Además de almacenar datos, una clase también agrupa las funciones que operan sobre esos datos.

Funciones de los miembros de la clase

Las funciones nos ayudan a manipular datos. Las funciones de los miembros de la clase se pueden definir de dos maneras:

  • Dentro de la definición de clase
  • Fuera de la definición de clase

Si se debe definir una función fuera de una definición de clase, debemos utilizar el operador de resolución de ámbito (::). Este debe ir acompañado de los nombres de la clase y la función.

Ejemplo

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

Salida:

C++ Funciones miembro de la clase Ejemplo 4 salida

Aquí hay una captura de pantalla del código:

C++ Funciones miembro de la clase Ejemplo 4 de código

Code Explicación:

  1. Incluya el archivo de encabezado iostream en nuestro programa para usar sus funciones.
  2. Incluya el archivo de encabezado de cadena en nuestro programa para usar sus funciones.
  3. Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
  4. Crea una clase llamada Guru99.
  5. Utilice el modificador de acceso público para marcar como accesibles públicamente a los miembros de la clase que estamos a punto de crear.
  6. Cree una variable de cadena denominada nombre_tutorial.
  7. Cree una variable entera llamada id.
  8. Cree una función llamada printname(). Esta función no está definida dentro de la definición de clase.
  9. Crea una función llamada printid(). Esta función se define dentro de la definición de la clase. Su cuerpo se ha añadido dentro de la definición de la clase.
  10. Imprima el valor de la identificación de la variable junto con otro texto en la consola. Tenga en cuenta que esto se ha agregado dentro del cuerpo de la función printid(). Solo se ejecutará cuando se llame a la función printid().
  11. Fin del cuerpo de la función printid().
  12. Fin del cuerpo de la clase Guru99.
  13. El inicio de la definición de la función printname().
  14. Imprima el valor de la variable nombre_tutorial en la consola junto con otro texto. Tenga en cuenta que esto se ha agregado dentro del cuerpo de la función printname(). Solo se ejecutará cuando se llame a la función printname().
  15. Fin de la definición de la función printname().
  16. Llame a la función principal(). La lógica del programa debe agregarse dentro del cuerpo de esta función.
  17. Crea una instancia de la clase Guru99 y dándole el nombre de guru99.
  18. Utilice la instancia anterior para asignar un valor de C++ a la variable nombre_tutorial.
  19. Utilice la instancia de guru99 para asignar un valor de 1001 a la identificación de la variable.
  20. Utilice la instancia guru99 para llamar a la función printname() .
  21. Llame al comando de fin (final de línea) para imprimir una nueva línea en blanco en la consola.
  22. Utilice la instancia guru99 para llamar a la función printid().
  23. El programa debe devolver valor una vez completado con éxito.
  24. Fin del cuerpo de la función main().

Dos funciones miembro especiales se ejecutan automáticamente cuando se crea un objeto y cuando se destruye.

Constructores y Destructores

¿Qué es un Constructor?

Los constructores son funciones especiales que inicializan objetos. C++ compiladores Se llama a un constructor al crear un objeto. Los constructores ayudan a asignar valores a los miembros de la clase. Por supuesto, esto ocurre después de que se les haya asignado un espacio de memoria.

¿Qué es un destructor?

Los destructores, por otro lado, ayudan a destruir objetos de clase.

El nombre del constructor debe ser similar al nombre de la clase. Los constructores no tienen un tipo de devolución.

El constructor se puede definir dentro o fuera del cuerpo de la clase. Si se define fuera del cuerpo de la clase, se debe definir con el nombre de la clase y el operador de resolución de alcance (::).

Ejemplo

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

Salida:

C++ Constructor y destructor Ejemplo 5 salida

Aquí hay una captura de pantalla del código:

C++ Constructor y destructor. Ejemplo de código 5.

Code Explicación:

  1. Incluya el archivo de encabezado iostream en el código para usar sus funciones.
  2. Incluya el espacio de nombres estándar en nuestro código para usar sus clases sin llamarlo.
  3. Crea una clase llamada ClassA.
  4. Utilice el modificador de acceso público para marcar el miembro que estamos a punto de crear como de acceso público.
  5. Crea un constructor para la clase.
  6. Texto para imprimir en la consola cuando se llama al constructor. El final es un C++ palabra clave, que significa línea final. Mueve el cursor del mouse a la siguiente línea.
  7. Fin del cuerpo del constructor de clase.
  8. Crea un destructor para la clase.
  9. Texto que se imprimirá en la consola cuando se llame al destructor. El final es un C++ palabra clave, que significa línea final. Mueve el cursor del mouse a la siguiente línea.
  10. Fin del cuerpo del destructor.
  11. Fin del cuerpo de la clase.
  12. Llame a la función principal(). La lógica del programa debe agregarse dentro del cuerpo de esta función.
  13. Crea un objeto de clase y asígnale el nombre a. Se llamará al constructor.
  14. Cree una variable entera llamada p y asígnele un valor de 1.
  15. Cree un bloque de declaración if usando la variable p.
  16. Crea un objeto de clase y dale el nombre b. Se llamará al destructor.
  17. Fin del cuerpo de la declaración if.
  18. Fin del cuerpo de la función main().

Preguntas Frecuentes

Una clase es un modelo definido por el usuario que agrupa miembros de datos y funciones miembro en un mismo tipo. Un objeto es una instancia concreta construida a partir de esa clase, que contiene su propia copia de los datos descritos por el modelo.

La principal diferencia es el acceso predeterminado: los miembros de una clase son privados por defecto, mientras que los miembros de una estructura son públicos por defecto. Ambos admiten herencia, constructores y encapsulación en C++.

C++ Admite tres tipos de constructores comunes: un constructor predeterminado sin argumentos, un constructor parametrizado que acepta valores para inicializar miembros y un constructor de copia que crea un nuevo objeto a partir de uno existente de la misma clase.

Una función amiga es una función que no pertenece a una clase y a la que se le concede acceso a los miembros privados y protegidos. Se declara dentro de la clase con la palabra clave `friend`, pero se define fuera de ella como una función ordinaria.

El puntero `this` es un puntero implícito disponible dentro de cada función miembro no estática. Apunta al objeto que invocó la función, lo que permite que el código haga referencia a los miembros de ese objeto y resuelva conflictos de nombres entre parámetros y miembros de datos.

La encapsulación agrupa los datos y las funciones que operan sobre ellos dentro de una sola clase, ocultando los detalles internos mediante miembros privados. Las funciones miembro públicas exponen una interfaz controlada, protegiendo los datos del acceso accidental o no autorizado.

Sí. Los asistentes de codificación de IA convierten una breve indicación o comentario en definiciones de clases funcionales, incluyendo miembros de datos, especificadores de acceso, constructores y funciones miembro. Siempre revise los niveles de acceso generados y la lógica de inicialización antes de compilar el código.

Sí. Copiloto de GitHub Sugiere declaraciones de clases, constructores, métodos get y setter a medida que escribes. Gestiona rápidamente el código repetitivo, aunque conviene verificar el acceso a los miembros, la lógica del constructor y el uso de los objetos antes de compilar.

Resumir este post con: