Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clases en C++

Clases en C++

Conceptos básicos de las clases en C++.
El contenido de este apartado es:
- Clases, objetos y atributos.
- Constructores,
- Destructores.
- Atributos de clase.
- Métodos de clase.
- Instancias de objetos.
- Ejemplos.

Luis Fajardo

October 13, 2022
Tweet

More Decks by Luis Fajardo

Other Decks in Programming

Transcript

  1. Clases de C++ Sirven como plantillas para crear objetos que

    contienen diferentes tipos de datos... Liceo Militar de Honduras | Luis E. Fajardo
  2. Clases y objetos Qué es una clase? Las clases son

    construcciones sintácticas que sirven para representar las características que debe tener un objeto creado con esa clase. Esta construcción sintáctica debe ser legible para quien lee o escribe el código y a la vez debe tener sentido lógico. Las clases son creadas durante la compilación del programa. Liceo Militar de Honduras | Luis E. Fajardo 2
  3. Clases y objetos Qué es un objeto? Los objetos son

    contrucciones definidas a partir de una clase. A los objetos también se les llama instancias de clase. Los objetos contienen los atributos de una clase y se pueden hacer operaciones sobre ellos. Un programa puede crear cualquier cantidad de objetos en memoria volátil siempre y cuando la capacidad de direccionamiento de la memoria lo permita. Los objetos son creados durante la ejecución del programa. Liceo Militar de Honduras | Luis E. Fajardo 3
  4. Clase: Persona Atributos de la clase: nombre edad sexo lugar_nac

    Liceo Militar de Honduras | Luis E. Fajardo 6
  5. Objeto 1 nombre: Martin edad: 3 años sexo: masculino lugar_nac:

    Bruselas, Belgica Liceo Militar de Honduras | Luis E. Fajardo 7
  6. Objeto 2 nombre: Joseph edad: 8 años sexo: masculino lugar_nac:

    Los Angeles CA, USA Liceo Militar de Honduras | Luis E. Fajardo 8
  7. Objeto 3 nombre: Josue edad: 17 años sexo: masculino lugar_nac:

    Santiago, Chile Liceo Militar de Honduras | Luis E. Fajardo 9
  8. Objeto 4 nombre: Marian edad: 15 años sexo: femenino lugar_nac:

    Roma, Italia Liceo Militar de Honduras | Luis E. Fajardo 10
  9. Objetos y sus respectivos atributos {"Martin", 3, "masculino", "Bruselas, Belgica"},

    {"Joseph", 8, "masculino", "Los Angeles CA, USA"}, {"Josue", 17, "masculino", "Santiago, Chile"}, {"Marian", 15, "femenino", "Roma, Italia"}, {"Allan", 38, "masculino", "Phoenix AZ, USA"}, {"Nataly", 44, "femenino", "Napoles, Italia"}, {"Corleone", 67, "masculino", "Palermo, Italia"}, {"Alice", 65, "femenino", "Valparaiso, Chile"} Liceo Militar de Honduras | Luis E. Fajardo 11
  10. antes de construir una clase en C++... ...existen algunos conceptos

    que se deben conocer antes de empezar... ...estos conceptos son los constructores, los destructores, los métodos y los atributos de clase. Liceo Militar de Honduras | Luis E. Fajardo 12
  11. Constructores Es un método que se ejecuta de manera automática

    al construir un objeto de una clase. Tiene como finalidad la inicialización de los atributos de la clase y ejecutar algunos métodos de la clase. Una clase puede tener tantos constructores como el desarrollador los necesite, a esto se le llama constructores sobrecargados. La característica más destacada de los constructores es que su nombre es el mismo de la clase, es decir, tiene el mismo nombre de la clase. Liceo Militar de Honduras | Luis E. Fajardo 13
  12. Constructores Las sobrecargas del constructor de una clase van a

    depender de las distintas combinaciones de argumentos de entrada al constructor. Cuando no se declara un constructor de manera explícita para una clase, entonces C++ se encarga de asignar un constructor por defecto a la clase. A diferencia de las funciones, los constructores no tienen la facultad de retornar valores. Liceo Militar de Honduras | Luis E. Fajardo 14
  13. Constructores Tipos de constructores Estos son los constructores más utilizados

    en C++: Constructor por defecto. Constructor parametrizado. Constructor de copia. Liceo Militar de Honduras | Luis E. Fajardo 15
  14. Destructores Es un método de la clase que se utiliza

    para destruir objetos del tipo de la clase. No tiene argumentos y tampoco puede retornar valores. Los destructores tienen el mismo nombre de la clase, con la particularidad que al inicio llevan el caracter ~ . Los destructores se destruyen automáticamente dependiendo del contexto en donde se encuentren. Los destructores son especialmente útiles para destruir objetos de almacenamiento dinámico. Liceo Militar de Honduras | Luis E. Fajardo 16
  15. Construyendo una clase Estructura sintáctica: class <nombre de la clase>

    { }; Clase Persona: class Persona { }; Liceo Militar de Honduras | Luis E. Fajardo 18
  16. Atributos de la clase Los atributos son características individuales que

    diferencian a un objeto de otro y determinan su apariencia, estado u otras cualidades. Los atributos se guardan como variables de tipo primitivo o de tipo compuesto. Los atributos determinan el comportamiento del objeto respecto a los demás objetos que pueda contener el programa. Liceo Militar de Honduras | Luis E. Fajardo 19
  17. Añadiendo atributos a la clase Estructura sintáctica: class <nombre de

    la clase> { <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; ... }; Liceo Militar de Honduras | Luis E. Fajardo 20
  18. Añadiendo atributos a la clase Clase Persona: class Persona {

    std::string nombre; int edad; char sexo; std::string lugar_nac; }; Liceo Militar de Honduras | Luis E. Fajardo 21
  19. Definiendo un constructor Constructor por defecto Este tipo de constructor

    no lleva argumentos, la inicialización de las variables se hace con valores por defecto que el desarrollador define dentro del constructor. class <nombre de la clase> { <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; public: <nombre de la clase>() {} // constructor por defecto }; Liceo Militar de Honduras | Luis E. Fajardo 23
  20. Definiendo un constructor Constructor por defecto class Persona { std::string

    nombre; int edad; char sexo; std::string lugar_nac; public: Persona() {} // constructor por defecto }; Liceo Militar de Honduras | Luis E. Fajardo 24
  21. Definiendo un constructor Constructor parametrizado Este tipo de constructor tiene

    argumentos de entrada que se utilizan luego en la inicialización de los atributos de la clase. class <nombre de la clase> { <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; public: <nombre de la clase>(<tipo de dato> <nombre de argumento>, <tipo de dato> <nombre de argumento>, ...) { // constructor parametrizado <nombre de atributo> = <nombre de argumento>; <nombre de atributo> = <nombre de argumento>; ... } }; Liceo Militar de Honduras | Luis E. Fajardo 25
  22. Definiendo un constructor Constructor parametrizado class Persona { std::string nombre;

    int edad; char sexo; std::string lugar_nac; public: Persona(std::string _nombre, int _edad, char _sexo, std::string _lugar_nac) { // constructor parametrizado nombre = _nombre; edad = _edad; sexo = _sexo; lugar_nac = _lugar_nac; } }; Liceo Militar de Honduras | Luis E. Fajardo 26
  23. Definiendo un constructor Constructor de copia Tiene como argumento una

    referencia a otro objeto de la misma clase, por tanto las variables del objeto que se está creando se inicializan con los valores del objeto que se pasa como parámetro. Se le llama constructor de copia, por que copia los valores de un objeto existente para inicializar otro objeto. En la declaración del constructor el parámetro de entrada debe tener la palabra reservada const para evitar modificaciones en el objeto que se está copiando. Liceo Militar de Honduras | Luis E. Fajardo 27
  24. Definiendo un constructor Constructor de copia class <nombre de la

    clase> { <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; <tipo de dato> <nombre de atributo>; public: <nombre de la clase>(const <nombre de la clase>& <nombre de objeto>) { // constructor de copia <nombre de atributo> = <nombre de objeto>.<nombre de atributo>; <nombre de atributo> = <nombre de objeto>.<nombre de atributo>; ... } }; Liceo Militar de Honduras | Luis E. Fajardo 28
  25. Definiendo un constructor Constructor de copia class Persona { std::string

    nombre; int edad; char sexo; std::string lugar_nac; public: Persona(const Persona& persona) { nombre = persona.nombre; edad = persona.edad; sexo = persona.sexo; lugar_nac = persona.lugar_nac; } } Liceo Militar de Honduras | Luis E. Fajardo 29
  26. Métodos de clase Los métodos de clase son funciones que

    sirven para manipular las variables de la clase, de ahí viene la primera característica relevante de la programación orientada a objetos que es el encapsulamiento. Los métodos se declaran y definen de la misma manera que una función cualquiera en C++. Liceo Militar de Honduras | Luis E. Fajardo 30
  27. Definiendo métodos de clase class Persona { std::string nombre; int

    edad; char sexo; std::string lugar_nac; public: Persona(std::string _nombre, int _edad, char _sexo, std::string _lugar_nac) { // constructor parametrizado ... } void imprimirInfo(); // metodo de clase }; Liceo Militar de Honduras | Luis E. Fajardo 31
  28. Métodos Set y Get Los métodos set y get son

    métodos que usualmente se definen para acceder a una variable privada de la clase. método set : este metodo se encarga de modificar directamente el valor de un atributo privado a través de un argumento. Generalmente es un método de tipo void y lleva un argumento del mismo tipo del atributo a modificar. método get : por lo general es un método de una sola línea de código que retorna el valor actual de un atributo privado. El valor de retorno de este método es del mismo tipo del atributo al cual hace referencia. Generalmente un método get no tiene argumentos. Liceo Militar de Honduras | Luis E. Fajardo 32
  29. Métodos Set y Get Generalmente los métodos set y get

    tienen nivel de acceso public o protected . Los métodos get y set los traduciremos a español, llamandolos métodos obtener y modificar . Liceo Militar de Honduras | Luis E. Fajardo 33
  30. Métodos Set y Get class Persona { std::string nombre; int

    edad; char sexo; std::string lugar_nac; public: Persona(std::string _nombre, int _edad, char _sexo, std::string _lugar_nac) { // constructor parametrizado ... } // metodo de clase void imprimir(); // metodos set void modificarNombre(std::string nombre); void modificarEdad(std::string nombre); // metodos get std::string obtenerNombre(); std::string obtenerEdad(); }; Liceo Militar de Honduras | Luis E. Fajardo 34
  31. Imprimiendo los atributos de clase Para mostrar en pantalla los

    datos de cada uno de los objetos se necesita acceder a sus atributos a través de un método de la clase. Para esto se debe definir un método de clase. Liceo Militar de Honduras | Luis E. Fajardo 35
  32. Imprimiendo los atributos de clase class Persona { std::string nombre;

    int edad; char sexo; std::string lugar_nac; public: //asumiendo que aqui esta definido el constructor ... // metodo de clase void imprimir() { std::cout << "nombre: " << nombre << ", " << "edad: " << edad << ", " << "sexo: " << sexo << ", " << "lugar_nac: " << lugar_nac << std::endl; } }; Liceo Militar de Honduras | Luis E. Fajardo 36
  33. Instancia de objetos de una clase Las instancias de una

    clase se pueden hacer desde cualquier función externa que reciba un objeto de la clase o que cree una instancia de la misma dentro de la función. Generalmente en programas pequeños las instancias de clase se crean en la función main() y las funciones externas que interactuan con la clase reciben el objeto como argumento de función. Liceo Militar de Honduras | Luis E. Fajardo 37
  34. Instancia de objetos de una clase int main(int argc, char

    *argv[]) { Persona p1 = Persona("Joseph", 8, 'M', "Los Angeles CA, USA"); Persona p2 = Persona("Josue", 17, 'M', "Santiago, Chile"); Persona p3 = Persona("Mariam", 15, 'F', "Roma, Italia"); Persona p4 = Persona("Alice", 65, 'F', "Lion, Francia"); Persona p5 = Persona("Martin", 3, 'M', "Bruselas, Belgica"); return 0; } Liceo Militar de Honduras | Luis E. Fajardo 38
  35. Imprimir metodos de cada instancia de clase int main(int argc,

    char *argv[]) { Persona p1 = Persona("Joseph", 8, 'M', "Los Angeles CA, USA"); Persona p2 = Persona("Josue", 17, 'M', "Santiago, Chile"); Persona p3 = Persona("Mariam", 15, 'F', "Roma, Italia"); Persona p4 = Persona("Alice", 65, 'F', "Lion, Francia"); Persona p5 = Persona("Martin", 3, 'M', "Bruselas, Belgica"); p1.imprimir(); p2.imprimir(); p3.imprimir(); p4.imprimir(); p5.imprimir(); return 0; } Liceo Militar de Honduras | Luis E. Fajardo 39
  36. Arreglos objetos de una clase Al igual que los arreglos

    de tipos de datos primitivos se pueden construir arreglos de tipo de datos compuestos. int main(int argc, char *argv[]) { // arreglo de objetos Persona personas[5]; personas[0] = Persona("Martin", 3, 'M', "Bruselas, Belgica"); personas[1] = Persona("Joseph", 8, 'M', "Los Angeles CA, USA"); personas[2] = Persona("Josue", 17, 'M', "Santiago, Chile"); personas[3] = Persona("Mariam", 15, 'F', "Roma, Italia"); personas[4] = Persona("Alice", 65, 'F', "Lion, Francia"); } Liceo Militar de Honduras | Luis E. Fajardo 40
  37. Invocar métodos de una clase int main(int argc, char *argv[])

    { // arreglo de objetos Persona personas[5]; personas[0] = Persona("Martin", 3, 'M', "Bruselas, Belgica"); personas[1] = Persona("Joseph", 8, 'M', "Los Angeles CA, USA"); personas[2] = Persona("Josue", 17, 'M', "Santiago, Chile"); personas[3] = Persona("Mariam", 15, 'F', "Roma, Italia"); personas[4] = Persona("Alice", 65, 'F', "Lion, Francia"); // invocar metodo imprimir for (Persona p : personas) { p.imprimir(); } } Liceo Militar de Honduras | Luis E. Fajardo 41
  38. Referencias Clases y objetos. https://makeitrealcamp.gitbook.io/programacion-orientada-por-objetos-en- ruby/clases-y-objetos Miembros especiales de la

    clase en C++. https://www.codingame.com/playgrounds/50577/miembros-especiales-de-la- clase-en-c-practica-2/ Liceo Militar de Honduras | Luis E. Fajardo 42