CLASES II


     ING. CAMILO TÁUTIVA MANCERA




Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Introducción
     Los      constructores     se     ejecutan
     automaticamente cuando se crea un objeto
     de una clase e inicializan los datos
     miembro
     Los destructores no entregan ningún valor
     ni reciben ningún parámetro, tampoco se
     pueden sobrecargar
     Mediante la interfaz, un usuario u otro
     objeto se cominican con un objeto
     Funciones set y get
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Temas
     Tipos de funciones miembro
     Tipos de constructores
     Funciones set y get
     Objetos y funciones miembro const
     Inicializadores de miembros
     Composición
     Funciones y clases friend (amigas)

Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Tipos de funciones miembros
   Constructores y destructores: se les llama
   automaticamente cuando un objeto se crea o se
   destruye
   set y get: permiten a los usuarios establecer
   (escribir) y leer (obtener) los valores de los datos
   miembro
   Operadores: permiten definir operadores
   estandar para los objetos de las clases
   Iteradores: procesan colecciones de objetos
   tales como arrays y listas

Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Tipos de constructores
   Por           defecto:               constructor               que          no   tiene
   argumentos
   Alternativo (predeterminado): constructor
   con parámetros
   Sobrecargado:           proporcionan      medios
   alternativos para inicializar objetos nuevos de
   una clase
   De copia: se crea automaticamente por el
   compilador cuando un objeto se pasa por valor;
   se llama también cuando un objeto se declara e
   inicializa con otro objeto del mismo tipo

Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Constructor por defecto
// el constructor no requiere parametros
Punto::Punto()
{
   x=0;
   y=0;
} // fin del constructor Punto

Constructor alternativo

// el constructor requiere dos parametros enteros y utiliza funciones miembro para
// inicializar los datos miembro
Punto::Punto(int valx, int valy)
{
   fijarx(valx);
   fijary(valy);
} // fin del constructor Punto


 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Funciones set y get
     set (establecer): permite al usuario establecer
     (escribir) los valores de los datos miembros
     privados

     get (obtener): permite al usuario leer los
     valores de los datos miembros privados

    Tienen la ventaja de que se puede
    controlar el formato en el cual se
   muestra la información y examinar
 cualquier intento de modificar los datos

Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Función set

// establece un nuevo valor para Tiempo de acuerdo con la hora universal,
// realiza la validación de los valores de datos y establece los valores no válidos en cero
void Tiempo::estableceHora( int h, int m, int s )
{
   hora = ( h >= 0 && h < 24 ) ? h : 0;
   minuto = ( m >= 0 && m < 60 ) ? m : 0;
   segundo = ( s >= 0 && s < 60 ) ? s : 0;
} // fin de la función estableceHora

Función get
// imprime Tiempo en formato estándar
void Tiempo::imprimeEstandar()
{
   cout << ( ( hora == 0 || hora == 12 ) ? 12 : hora % 12 )
      << ":" << setfill( '0' ) << setw( 2 ) << minuto
      << ":" << setw( 2 ) << segundo
      << ( hora < 12 ? " AM" : " PM" );
} // fin de la función imprimeEstandar

 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Objetos y funciones miembro
const
  Algunos objetos necesitan ser modificados y otros no; la
  palabra const especifica que un objeto no se puede
  modificar y que cualquier intento de hacerlo provocara un
  error
                Tiempo despierta( 6, 45, 0 );            // objeto no constante
                const Tiempo mediodia( 12, 0, 0 ); // objeto constante

   El compilador deshabilita las llamadas a funciones
   miembro para objetos const, a menos que las funciones
   miembro por si mismas se declaren como const. Además el
   compilador no permite a las funciones miembro declaradas
   como const modificar al objeto
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Función miembro const

// imprime Tiempo en formato universal                                          Una función se
void Tiempo::imprimeUniversal() const
{                                                                               especifica como
   cout << setfill( '0' ) << setw( 2 ) << hora << ":"                           const tanto en su
      << setw( 2 ) << minuto << ":"
      << setw( 2 ) << segundo;                                                  prototipo como
                                                                                en su definición
} // fin de la función imprimeUniversal




 La declaración const no esta permitida
   para constructores y destructores

                                                                                                1
 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Inicializadores de miembros
     No está permitido inicializar un dato miembro de
     una clase cuando ésta se define
     Se busca inicializar los datos miembro cada vez
     que se crea una instancia específica de la clase
     (objeto)
     El sitio lógico para inicializar los datos miembro
     está dentro del constructor de la clase, que utiliza
     expresiones de asignación
      Ciertos tipos de datos (constantes y referencias)
     no pueden ser valores asignados, para esto se
     utilizan los Inicializadores de miembros
                                                                               1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Ejemplo inicializadores de miembros
class Incremento {
public:
  Incremento( int c = 0, int i = 1 ); // constructor predeterminado
  void sumaIncremento()
  {
     cuenta += incremento;
  } // fin de la función sumaIncremento
  void imprime() const; // imprime cuenta e incremento
private:
  int cuenta;
  const int incremento; // dato miembro constante
}; // fin de la clase Incremento

// constructor
Incremento::Incremento( int c, int i )
   : cuenta( c ), // inicializador para un miembro no constante
     incremento( i ) // se requiere inicializador para un miembro constante
{
   // cuerpo vacío
} // fin del constructor Incremento

                                                                                1
 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Composición
    Una clase compuesta es aquella que contiene
    datos miembro que son así mismo objetos de
    otras clases
   int main()
   {
     Fecha nacimiento( 7, 24, 1949 );
     Fecha contratacion( 3, 12, 1988 );
     Empleado gerente( "Juan", "Perez", nacimiento, contratacion );
     cout << 'n';
     gerente.imprime();
     cout << "nVerifica el constructor Fecha con valores no validos:n";
     Fecha ultimoDiaFest( 14, 35, 1994 ); // mes y día no válidos
     cout << endl;
     return 0;
   } // fin de main
                                                                               1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Funciones y clases amigas
   Son funciones que se definen
   fuera del alcance de la clase y
   aun así tienen el derecho de
   acceder a los miembros no
   publicos de la clase
   Las funciones independientes o
   las clases completas se pueden
   declarar para que sean amigas de
   otra clase
                                                                               1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Ejemplo funciones amigas
 // Definición de la clase Cuenta
 class Cuenta {
    friend void estableceX( Cuenta &, int ); // declaración de amistad
 public:
    Cuenta() // constructor
       : x( 0 ) // inicializa x en 0
    {
       // cuerpo vacío
    } // fin del constructor Cuenta
    // despliega x
    void imprime() const
    {
       cout << x << endl;
    } // fin de lafunción imprime
 private:
    int x; // dato miembro
 }; // fin de la clase Cuenta


  La amistad se otorga, no se toma
  La amistad no es simétrica ni transitiva
                                                                               1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Apuntador this
     Cada objeto tiene acceso a su propia dirección a
     través de un apuntador llamado this

      // imprime x mediante el uso implícito y explícito de apuntadores this;
      // se requieren paréntesis alrededor de *this
      void Prueba::imprime() const
      {
         // uso implícito del apuntador this para acceder al miembro x
         cout << "       x = " << x;
         // uso explícito del apuntador this para acceder al miembro x
         cout << "n this->x = " << this->x;
         // uso explícito del apuntador this desreferenciado y
         // el operador punto para acceder al miembro x
         cout << "n(*this).x = " << ( *this ).x << endl;
      } // fin de la función imprime
                                                                                1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Operadores new y delete
     Administración de memoria dinámica: controlar
     la asignación y liberación de memoria en un
     programa, para cualquier tipo de dato (o clase)
     Se lleva a cabo con los operadores new y delete
                Tiempo *ptrTiempo;
                ptrTiempo= new Tiempo;
                delete ptrTiempo;


    Se utiliza el encabezado <new>
                                                                               1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Miembros de clase static
     Una variable de clase static (estática) representa
     información “propia de la clase”, es decir una
     propiedad de la clase, no de un objeto especifico
     de la clase
     Los datos miembro estáticos tienen alcance de
     clase y se pueden declarar como public, private o
     protected
     Los miembros estáticos de una clase existen
     incluso cuando no existen objetos de la clase
     Acceso: Nombreclase::Miembroestatico
                                                                               1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Ejemplo dato private y funcion public static
 // Definición de la clase Empleado
 class Empleado {
 public:
    Empleado() // constructor
    // Función miembro estática
    static int obtienecuenta();
 private:
    char *nombre;
    char *apellido
   // dato miembro estático
    static int cuenta;
 }; // fin de la clase Empleado


                                  Nombreclase::Miembroestatico
                   Public:        A través de cualquier objeto de dicha clase
Acceso                                 A través de una función miembro
                  Private y            public static
                  protected
                                        Nombreclase::Nombrefuncion
                                                                                1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Clases contenedoras e
iteradoras
    Las clases contenedoras son clases diseñadas para contener
    colecciones de objetos (arreglos, pilas, colas, arboles, etc.)
    Un iterador es un objeto que devuelve el siguiente
    elemento de una colección (o realiza alguna acción sobre el
    siguiente elemento de una colección)

Clases proxi
    La clase proxi es una clase que solo conoce la interfaz
    pública de su clase y permite a los usuarios utilizar los
    servicios de la clase sin dar acceso a los detalles de
    implementación
                                                                               2
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
Bibliografia
     Deitel H., Deitel P., “Como programar en
     C++”, cuarta edición. Pearson educación.
     Capítulo 7
     Joyanes A. Luis, “Prograamción en C++,
     algoritmos, estructuras de datos y objetos”.
     Parte I, Capítulo 8; parte II, Capítulo 13



                                                                               2
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II

Clases

  • 1.
    CLASES II ING. CAMILO TÁUTIVA MANCERA Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 2.
    Introducción Los constructores se ejecutan automaticamente cuando se crea un objeto de una clase e inicializan los datos miembro Los destructores no entregan ningún valor ni reciben ningún parámetro, tampoco se pueden sobrecargar Mediante la interfaz, un usuario u otro objeto se cominican con un objeto Funciones set y get Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 3.
    Temas Tipos de funciones miembro Tipos de constructores Funciones set y get Objetos y funciones miembro const Inicializadores de miembros Composición Funciones y clases friend (amigas) Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 4.
    Tipos de funcionesmiembros Constructores y destructores: se les llama automaticamente cuando un objeto se crea o se destruye set y get: permiten a los usuarios establecer (escribir) y leer (obtener) los valores de los datos miembro Operadores: permiten definir operadores estandar para los objetos de las clases Iteradores: procesan colecciones de objetos tales como arrays y listas Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 5.
    Tipos de constructores Por defecto: constructor que no tiene argumentos Alternativo (predeterminado): constructor con parámetros Sobrecargado: proporcionan medios alternativos para inicializar objetos nuevos de una clase De copia: se crea automaticamente por el compilador cuando un objeto se pasa por valor; se llama también cuando un objeto se declara e inicializa con otro objeto del mismo tipo Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 6.
    Constructor por defecto //el constructor no requiere parametros Punto::Punto() { x=0; y=0; } // fin del constructor Punto Constructor alternativo // el constructor requiere dos parametros enteros y utiliza funciones miembro para // inicializar los datos miembro Punto::Punto(int valx, int valy) { fijarx(valx); fijary(valy); } // fin del constructor Punto Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 7.
    Funciones set yget set (establecer): permite al usuario establecer (escribir) los valores de los datos miembros privados get (obtener): permite al usuario leer los valores de los datos miembros privados Tienen la ventaja de que se puede controlar el formato en el cual se muestra la información y examinar cualquier intento de modificar los datos Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 8.
    Función set // estableceun nuevo valor para Tiempo de acuerdo con la hora universal, // realiza la validación de los valores de datos y establece los valores no válidos en cero void Tiempo::estableceHora( int h, int m, int s ) { hora = ( h >= 0 && h < 24 ) ? h : 0; minuto = ( m >= 0 && m < 60 ) ? m : 0; segundo = ( s >= 0 && s < 60 ) ? s : 0; } // fin de la función estableceHora Función get // imprime Tiempo en formato estándar void Tiempo::imprimeEstandar() { cout << ( ( hora == 0 || hora == 12 ) ? 12 : hora % 12 ) << ":" << setfill( '0' ) << setw( 2 ) << minuto << ":" << setw( 2 ) << segundo << ( hora < 12 ? " AM" : " PM" ); } // fin de la función imprimeEstandar Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 9.
    Objetos y funcionesmiembro const Algunos objetos necesitan ser modificados y otros no; la palabra const especifica que un objeto no se puede modificar y que cualquier intento de hacerlo provocara un error Tiempo despierta( 6, 45, 0 ); // objeto no constante const Tiempo mediodia( 12, 0, 0 ); // objeto constante El compilador deshabilita las llamadas a funciones miembro para objetos const, a menos que las funciones miembro por si mismas se declaren como const. Además el compilador no permite a las funciones miembro declaradas como const modificar al objeto Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 10.
    Función miembro const //imprime Tiempo en formato universal Una función se void Tiempo::imprimeUniversal() const { especifica como cout << setfill( '0' ) << setw( 2 ) << hora << ":" const tanto en su << setw( 2 ) << minuto << ":" << setw( 2 ) << segundo; prototipo como en su definición } // fin de la función imprimeUniversal La declaración const no esta permitida para constructores y destructores 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 11.
    Inicializadores de miembros No está permitido inicializar un dato miembro de una clase cuando ésta se define Se busca inicializar los datos miembro cada vez que se crea una instancia específica de la clase (objeto) El sitio lógico para inicializar los datos miembro está dentro del constructor de la clase, que utiliza expresiones de asignación Ciertos tipos de datos (constantes y referencias) no pueden ser valores asignados, para esto se utilizan los Inicializadores de miembros 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 12.
    Ejemplo inicializadores demiembros class Incremento { public: Incremento( int c = 0, int i = 1 ); // constructor predeterminado void sumaIncremento() { cuenta += incremento; } // fin de la función sumaIncremento void imprime() const; // imprime cuenta e incremento private: int cuenta; const int incremento; // dato miembro constante }; // fin de la clase Incremento // constructor Incremento::Incremento( int c, int i ) : cuenta( c ), // inicializador para un miembro no constante incremento( i ) // se requiere inicializador para un miembro constante { // cuerpo vacío } // fin del constructor Incremento 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 13.
    Composición Una clase compuesta es aquella que contiene datos miembro que son así mismo objetos de otras clases int main() { Fecha nacimiento( 7, 24, 1949 ); Fecha contratacion( 3, 12, 1988 ); Empleado gerente( "Juan", "Perez", nacimiento, contratacion ); cout << 'n'; gerente.imprime(); cout << "nVerifica el constructor Fecha con valores no validos:n"; Fecha ultimoDiaFest( 14, 35, 1994 ); // mes y día no válidos cout << endl; return 0; } // fin de main 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 14.
    Funciones y clasesamigas Son funciones que se definen fuera del alcance de la clase y aun así tienen el derecho de acceder a los miembros no publicos de la clase Las funciones independientes o las clases completas se pueden declarar para que sean amigas de otra clase 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 15.
    Ejemplo funciones amigas // Definición de la clase Cuenta class Cuenta { friend void estableceX( Cuenta &, int ); // declaración de amistad public: Cuenta() // constructor : x( 0 ) // inicializa x en 0 { // cuerpo vacío } // fin del constructor Cuenta // despliega x void imprime() const { cout << x << endl; } // fin de lafunción imprime private: int x; // dato miembro }; // fin de la clase Cuenta La amistad se otorga, no se toma La amistad no es simétrica ni transitiva 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 16.
    Apuntador this Cada objeto tiene acceso a su propia dirección a través de un apuntador llamado this // imprime x mediante el uso implícito y explícito de apuntadores this; // se requieren paréntesis alrededor de *this void Prueba::imprime() const { // uso implícito del apuntador this para acceder al miembro x cout << " x = " << x; // uso explícito del apuntador this para acceder al miembro x cout << "n this->x = " << this->x; // uso explícito del apuntador this desreferenciado y // el operador punto para acceder al miembro x cout << "n(*this).x = " << ( *this ).x << endl; } // fin de la función imprime 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 17.
    Operadores new ydelete Administración de memoria dinámica: controlar la asignación y liberación de memoria en un programa, para cualquier tipo de dato (o clase) Se lleva a cabo con los operadores new y delete Tiempo *ptrTiempo; ptrTiempo= new Tiempo; delete ptrTiempo; Se utiliza el encabezado <new> 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 18.
    Miembros de clasestatic Una variable de clase static (estática) representa información “propia de la clase”, es decir una propiedad de la clase, no de un objeto especifico de la clase Los datos miembro estáticos tienen alcance de clase y se pueden declarar como public, private o protected Los miembros estáticos de una clase existen incluso cuando no existen objetos de la clase Acceso: Nombreclase::Miembroestatico 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 19.
    Ejemplo dato privatey funcion public static // Definición de la clase Empleado class Empleado { public: Empleado() // constructor // Función miembro estática static int obtienecuenta(); private: char *nombre; char *apellido // dato miembro estático static int cuenta; }; // fin de la clase Empleado Nombreclase::Miembroestatico Public: A través de cualquier objeto de dicha clase Acceso A través de una función miembro Private y public static protected Nombreclase::Nombrefuncion 1 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 20.
    Clases contenedoras e iteradoras Las clases contenedoras son clases diseñadas para contener colecciones de objetos (arreglos, pilas, colas, arboles, etc.) Un iterador es un objeto que devuelve el siguiente elemento de una colección (o realiza alguna acción sobre el siguiente elemento de una colección) Clases proxi La clase proxi es una clase que solo conoce la interfaz pública de su clase y permite a los usuarios utilizar los servicios de la clase sin dar acceso a los detalles de implementación 2 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
  • 21.
    Bibliografia Deitel H., Deitel P., “Como programar en C++”, cuarta edición. Pearson educación. Capítulo 7 Joyanes A. Luis, “Prograamción en C++, algoritmos, estructuras de datos y objetos”. Parte I, Capítulo 8; parte II, Capítulo 13 2 Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II