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: