SlideShare une entreprise Scribd logo
1  sur  15
Tema:
Polimorfismo en C++




     Nombre:
   Iván Villarreal

    Profesora:
 María de Dimares

      Materia:
Estructura de Datos I
        2012
INTRODUCCION
         
Una de las tres mayores facetas de la programación orientada a
objetos es el polimorfismo. Aplicado a C++, el término
polimorfismo usado para describir el proceso en el cual
diferentes implementaciones de una función pueden ser
accedidas a través del mismo nombre. Por esta razón, el
polimorfismo es en ocasiones caracterizado por la frase "Una
interface, múltiples métodos." Esto significa que cada miembro
de una clase general de operaciones puede ser accedida del
mismo modo, incluso cuando las acciones especificas con cada
operación puedan diferir.
Polimorfismo
                           
 En programación orientada a objetos el polimorfismo se
  refiere a la posibilidad de enviar un mensaje a un grupo de
  objetos cuya naturaleza puede ser heterogénea. El único
  requisito que deben cumplir los objetos que se utilizan de
  manera polimórfica es saber responder al mensaje que se les
  envía.
  La apariencia del código puede ser muy diferente
  dependiendo del lenguaje que se utilice, más allá de las
  obvias diferencias sintácticas.
  Por ejemplo, en un lenguaje de programación que cuenta
  con un sistema de tipos dinámico (en los que las variables
  pueden contener datos de cualquier tipo u objetos de
  cualquier clase) como Smalltalk no se requiere que los
  objetos que se utilizan de modo polimórfico sean parte de
  una jerarquía de clases.
En resumen…

En la programación orientada a objetos, la esencia del
polimorfismo no atañe a la clase o prototipo de la que
provienen los objetos. Aún así, en los lenguajes basados en
clases, es habitual (y en algunos tal vez sea el único modo)
que dichos objetos pertenezcan a subclases pertenecientes
a una misma jerarquía. Entonces, el polimorfismo debe
verse como una forma flexible de usar un grupo de objetos
(como si fueran sólo uno).

Podría decirse que el polimorfismo en esencia refiere al
comportamiento de los objetos, no a su pertenencia a una
jerarquía de clases (o a sus tipos de datos).
#include<iostream>

EJEMPLOS
           using namespace std;

           class Figura {
           private:
           float base;
           float altura;
           public:
           void captura();
           virtual unsigned float perimetro()=0;
           virtual unsigned float area()=0;
            };
           class Rectangulo: public Figura {
           public:
           void imprime();
           unsigned float perimetro(){return 2*(base+altura);}
           unsigned float area(){return base*altura;}
           };
           class Triangulo: public Figura {
           public:
           void muestra();
           unsigned float perimetro(){return 2*altura+base}
           unsigned float area(){return (base*altura)/2;}
           };
           void Figura::captura()
           {
           cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO
           ISÓSCELES Y UN RECTANGULO:" << endl;
           cout << "escribe la altura: ";
           cin >> altura;
           cout << "escribe la base: ";
           cin >> base;
           cout << "EL PERIMETRO ES: " << perimetro();
           cout << "EL AREA ES: " << area();
           }
EJEMPLOS
PUNTEROS A TIPOS DERIVADOS.

                                
 La fundación del polimorfismo en tiempo de ejecución es el puntero
  de la clase base. Punteros a la clase base y clases derivadas están
  relacionados en la manera en que otros tipos de puntero no lo están.
  Como aprendió al principio del libro, un puntero de un tipo
  generalmente no puede apuntar a un objeto de otro tipo. Sin
  embargo, los punteros de clase base y objetos derivados son la
  excepción a esta regla. En C++, un puntero de la clase base podría
  ser usado para apuntar a un objeto de cualquier clase derivada de
  esa base. Por ejemplo, asumiendo que usted tiene una clase base
  llamada 'clase B' y una clase llamada 'clase_D', la cual es derivada de
  'clase_B'. En C++, cualquier puntero declarado como un puntero a
  'clase_B' puede tambien ser un puntero a 'clase_D'. Entonces, dado
REFERENCIAS A TIPOS DERIVADOS

                          
 Similar a la acción de punteros ya descritas, una
  referencia a la clase base puede ser usada para referirse
  a un objeto de un tipo derivado. La mas común
  aplicación de esto es encontrada en los parámetros de la
  funciones. Una parámetro de referencia de la clase base
  puede recibir objetos de la base clase así como también
  otro tipo derivado de esa misma base.
Clasificación
                        
Se puede clasificar el polimorfismo en dos grandes
clases:
 Polimorfismo dinámico (o polimorfismo
   paramétrico) es aquél en el que el código no
   incluye ningún tipo de especificación sobre el tipo
   de datos sobre el que se trabaja. Así, puede ser
   utilizado a todo tipo de datos compatible.
 Polimorfismo estático (o polimorfismo ad hoc) es
   aquél en el que los tipos a los que se aplica el
   polimorfismo deben ser explicitados y declarados
   uno por uno antes de poder ser utilizados.
Diferencia entre polimorfismo y sobre carga

                                     
El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante
ventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sin
necesidad de tocar las clases ya existentes (imaginemos que deseamos añadir
una clase Multiplicar), basta con recompilar todo el código que incluye los
nuevos tipos añadidos

La sobrecarga se da siempre dentro de una sola clase, mientras que el
polimorfismo se da entre clases distintas.
Un método está sobrecargado si dentro de una clase existen dos o más
declaraciones de dicho método con el mismo nombre pero con parámetros
distintos, por lo que no hay que confundirlo con polimorfismo.

En definitiva: La sobrecarga se resuelve en tiempo de compilación utilizando los
nombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelve
en tiempo de ejecución del programa, esto es, mientras se ejecuta, en función
de la clase a la que pertenece el objeto.
FUNCIONES VIRTUALES
                                 
 El polimorfismo en tiempo de ejecución es logrado por una
  combinación de dos características: 'Herencia y funciones virtuales".
  Aprendió sobre la herencia en el capitulo precedente. Aquí,
  aprenderá sobre función virtual.

 Una función virtual es una función que es declarada como 'virtual'
  en una clase base y es redefinida en una o mas clases derivadas.
  Además, cada clase derivada puede tener su propia versión de la
  función virtual. Lo que hace interesantes a las funciones virtuales es
  que sucede cuando una es llamada a través de un puntero de
  clase base ( o referencia ). En esta situación, C++ determina a cual
  versión de la función llamar basándose en el tipo de objeto
  apuntado por el puntero. Y, esta determinación es hecha en
  'tiempo de ejecución'. Además, cuando diferentes objetos son
  apuntados, diferentes versiones de la función virtual son ejecutadas.
PORQUE FUNCIONES VIRTUALES

                               
Como se declaraba en el inicio de este capítulo, las funciones virtuales
en combinación con tipos derivados le permiten a C++ soportar
polimorfismo en tiempo de ejecución. El polimorfismo es esencial para la
programación orientada a objetos por una razón: Esta permite a una
clase generalizada especificar aquellas funciones que serán comunes a
todas las derivadas de esa clase, mientras que permite a una clase
derivada definir la implementación específica de algunos o todas de
esas funciones. A veces esta idea es expresada como: La clase base
dicta la 'interface' general que cualquier objeto derivado de esa clase
tendrá, pero permite a la clase derivada definir el método actual usado
para implementar esa interface. De ahí que la frase "una interface
múltiples métodos" sea usada a menudo para describir el polimorfismo.
Parte del truco de aplicar el polimorfismo de una manera satisfactoria es
comprender que la clase base y derivada forman una jerarquía, la cual se
mueve de mayor a menor generalización (base a derivada). Diseñada
correctamente, la clase base provee todos los elementos que una clase
derivada puede usar directamente. También define cuales funciones la
clase derivada debe implementar por su cuenta. Esto permite a la clase
derivada la flexibilidad para definir sus propios métodos, y aun mantener un
interface consistente.
Eso es, como la forma de la interface es definida por la clase base,
cualquier clase derivada compartirá esa interface común. Además, el uso
de funciones virtuales hace posible para la clase base definir interfaces
genéricas que serán usada por todas las clases derivadas. En este punto,
usted debe preguntarse a si mismo porque una consistente interface con
múltiples implementaciones es importante. La respuesta, nuevamente, no
lleva a la fuerza central manejadora detrás de la programación orientada a
objetos: Esta ayuda al programador a manejar programas de complejidad
creciente.
FUNCIONES VIRTUALES PURAS Y CLASES
             ABSTRACTAS
                                  
 Como se ha visto, cuando una funcion virtual que no es redefinida en
  una clase derivada es llamada por un objeto de esa clase derivada, la
  version de la funcion como se ha definido en la clase base es utilizada.
  Sin embargo, en muchas circunstancias, no habra una declaracion con
  significado en una funcion virtual dentro de la clase base. Por ejemplo,
  en la clase base 'figura' usada en el ejemplo anterior, la definicion de
  'mostrar_area()' es simplemente un sustituto sintetico. No computara ni
  mostrara el area de ningun tipo de objeto. Como vera cuando cree sus
  propias librerias de clases no es poco comun para una funcion virtual
  tener una definicion sin significado en el contexto de su clase base.
Polimorfismo  ppt

Contenu connexe

Tendances

Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Josue Lara Reyes
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlLic_Vera
 
Lenguajes de bases de datos
Lenguajes de bases de datosLenguajes de bases de datos
Lenguajes de bases de datosralbarracin
 
Polimorfismo y Clases Abstractas
Polimorfismo y Clases AbstractasPolimorfismo y Clases Abstractas
Polimorfismo y Clases Abstractascodigosyalgomas
 
Métodos POO
Métodos POOMétodos POO
Métodos POO1da4
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosMario Villaseñor
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenKarlytoz_36
 
Clases abstractas e interfaces
Clases abstractas e interfacesClases abstractas e interfaces
Clases abstractas e interfaceslopezcortes
 
Modelo Entidad Relación Extendido.
Modelo Entidad Relación Extendido.Modelo Entidad Relación Extendido.
Modelo Entidad Relación Extendido.nayis2010
 
Lenguaje de consulta de datos
Lenguaje de consulta de datosLenguaje de consulta de datos
Lenguaje de consulta de datosFrancis Xavier
 

Tendances (20)

Herencia poo
Herencia pooHerencia poo
Herencia poo
 
Greenfoot 2
Greenfoot 2Greenfoot 2
Greenfoot 2
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Lenguajes de bases de datos
Lenguajes de bases de datosLenguajes de bases de datos
Lenguajes de bases de datos
 
Polimorfismo y Clases Abstractas
Polimorfismo y Clases AbstractasPolimorfismo y Clases Abstractas
Polimorfismo y Clases Abstractas
 
Métodos POO
Métodos POOMétodos POO
Métodos POO
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a Objetos
 
Programación Orientada a Objetos
Programación Orientada  a ObjetosProgramación Orientada  a Objetos
Programación Orientada a Objetos
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - Resumen
 
Clases abstractas e interfaces
Clases abstractas e interfacesClases abstractas e interfaces
Clases abstractas e interfaces
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
Modelo Entidad Relación Extendido.
Modelo Entidad Relación Extendido.Modelo Entidad Relación Extendido.
Modelo Entidad Relación Extendido.
 
Lenguaje de consulta de datos
Lenguaje de consulta de datosLenguaje de consulta de datos
Lenguaje de consulta de datos
 
Recursividad
RecursividadRecursividad
Recursividad
 
Conceptos poo (presentación1)
Conceptos poo (presentación1)Conceptos poo (presentación1)
Conceptos poo (presentación1)
 

En vedette

Polimorfismos Geneticos
Polimorfismos GeneticosPolimorfismos Geneticos
Polimorfismos Geneticosmauroberta
 
Polimorfismo
PolimorfismoPolimorfismo
PolimorfismoCaveiras
 
Genetica polomorfismos-1
Genetica polomorfismos-1Genetica polomorfismos-1
Genetica polomorfismos-1willy5121
 
Polimorfismo variabilidad
Polimorfismo variabilidadPolimorfismo variabilidad
Polimorfismo variabilidadAlfonso
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoActimel
 
Mutaciones y snps
Mutaciones y snpsMutaciones y snps
Mutaciones y snpsEdith Arias
 
Polimorfismo java
Polimorfismo javaPolimorfismo java
Polimorfismo javaFAFICA
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosAlexys González
 
Marcadores moleculares De Stefano
Marcadores moleculares De StefanoMarcadores moleculares De Stefano
Marcadores moleculares De StefanoAMERICA CASTAÑEDA
 
Polimorfismo de adn[1]
Polimorfismo de adn[1]Polimorfismo de adn[1]
Polimorfismo de adn[1]Lisseth Rivmar
 

En vedette (20)

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismos Geneticos
Polimorfismos GeneticosPolimorfismos Geneticos
Polimorfismos Geneticos
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Genetica polomorfismos-1
Genetica polomorfismos-1Genetica polomorfismos-1
Genetica polomorfismos-1
 
Polimorfismo genetico
Polimorfismo geneticoPolimorfismo genetico
Polimorfismo genetico
 
Polimorfismo final
Polimorfismo finalPolimorfismo final
Polimorfismo final
 
Polimorfismo variabilidad
Polimorfismo variabilidadPolimorfismo variabilidad
Polimorfismo variabilidad
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Mutaciones y snps
Mutaciones y snpsMutaciones y snps
Mutaciones y snps
 
Polimorfismo java
Polimorfismo javaPolimorfismo java
Polimorfismo java
 
Mutación. polimorfismos
Mutación. polimorfismosMutación. polimorfismos
Mutación. polimorfismos
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Programacion oo
Programacion ooProgramacion oo
Programacion oo
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a Objetos
 
ONCOgenics
ONCOgenicsONCOgenics
ONCOgenics
 
Marcadores moleculares De Stefano
Marcadores moleculares De StefanoMarcadores moleculares De Stefano
Marcadores moleculares De Stefano
 
Polimorfismo de adn[1]
Polimorfismo de adn[1]Polimorfismo de adn[1]
Polimorfismo de adn[1]
 

Similaire à Polimorfismo ppt

Similaire à Polimorfismo ppt (20)

Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 
manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
polimorfismo
polimorfismopolimorfismo
polimorfismo
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
 
Polimorfism oo
Polimorfism ooPolimorfism oo
Polimorfism oo
 
Guía polimorfismo
Guía polimorfismoGuía polimorfismo
Guía polimorfismo
 
Vn-Desarrollo
Vn-DesarrolloVn-Desarrollo
Vn-Desarrollo
 
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
 
Programación ii presentación tema 5
Programación ii presentación tema 5Programación ii presentación tema 5
Programación ii presentación tema 5
 
Ed java
Ed javaEd java
Ed java
 
Ed java
Ed javaEd java
Ed java
 
JAVA- basico
JAVA- basicoJAVA- basico
JAVA- basico
 
Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)
 
Clase
ClaseClase
Clase
 

Polimorfismo ppt

  • 1. Tema: Polimorfismo en C++ Nombre: Iván Villarreal Profesora: María de Dimares Materia: Estructura de Datos I 2012
  • 2. INTRODUCCION  Una de las tres mayores facetas de la programación orientada a objetos es el polimorfismo. Aplicado a C++, el término polimorfismo usado para describir el proceso en el cual diferentes implementaciones de una función pueden ser accedidas a través del mismo nombre. Por esta razón, el polimorfismo es en ocasiones caracterizado por la frase "Una interface, múltiples métodos." Esto significa que cada miembro de una clase general de operaciones puede ser accedida del mismo modo, incluso cuando las acciones especificas con cada operación puedan diferir.
  • 3. Polimorfismo   En programación orientada a objetos el polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía. La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las obvias diferencias sintácticas. Por ejemplo, en un lenguaje de programación que cuenta con un sistema de tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo polimórfico sean parte de una jerarquía de clases.
  • 4. En resumen… En la programación orientada a objetos, la esencia del polimorfismo no atañe a la clase o prototipo de la que provienen los objetos. Aún así, en los lenguajes basados en clases, es habitual (y en algunos tal vez sea el único modo) que dichos objetos pertenezcan a subclases pertenecientes a una misma jerarquía. Entonces, el polimorfismo debe verse como una forma flexible de usar un grupo de objetos (como si fueran sólo uno). Podría decirse que el polimorfismo en esencia refiere al comportamiento de los objetos, no a su pertenencia a una jerarquía de clases (o a sus tipos de datos).
  • 5. #include<iostream> EJEMPLOS using namespace std; class Figura { private: float base; float altura; public: void captura(); virtual unsigned float perimetro()=0; virtual unsigned float area()=0; }; class Rectangulo: public Figura { public: void imprime(); unsigned float perimetro(){return 2*(base+altura);} unsigned float area(){return base*altura;} }; class Triangulo: public Figura { public: void muestra(); unsigned float perimetro(){return 2*altura+base} unsigned float area(){return (base*altura)/2;} }; void Figura::captura() { cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISÓSCELES Y UN RECTANGULO:" << endl; cout << "escribe la altura: "; cin >> altura; cout << "escribe la base: "; cin >> base; cout << "EL PERIMETRO ES: " << perimetro(); cout << "EL AREA ES: " << area(); }
  • 7. PUNTEROS A TIPOS DERIVADOS.   La fundación del polimorfismo en tiempo de ejecución es el puntero de la clase base. Punteros a la clase base y clases derivadas están relacionados en la manera en que otros tipos de puntero no lo están. Como aprendió al principio del libro, un puntero de un tipo generalmente no puede apuntar a un objeto de otro tipo. Sin embargo, los punteros de clase base y objetos derivados son la excepción a esta regla. En C++, un puntero de la clase base podría ser usado para apuntar a un objeto de cualquier clase derivada de esa base. Por ejemplo, asumiendo que usted tiene una clase base llamada 'clase B' y una clase llamada 'clase_D', la cual es derivada de 'clase_B'. En C++, cualquier puntero declarado como un puntero a 'clase_B' puede tambien ser un puntero a 'clase_D'. Entonces, dado
  • 8. REFERENCIAS A TIPOS DERIVADOS   Similar a la acción de punteros ya descritas, una referencia a la clase base puede ser usada para referirse a un objeto de un tipo derivado. La mas común aplicación de esto es encontrada en los parámetros de la funciones. Una parámetro de referencia de la clase base puede recibir objetos de la base clase así como también otro tipo derivado de esa misma base.
  • 9. Clasificación  Se puede clasificar el polimorfismo en dos grandes clases:  Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.  Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.
  • 10. Diferencia entre polimorfismo y sobre carga  El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante ventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sin necesidad de tocar las clases ya existentes (imaginemos que deseamos añadir una clase Multiplicar), basta con recompilar todo el código que incluye los nuevos tipos añadidos La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas. Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de dicho método con el mismo nombre pero con parámetros distintos, por lo que no hay que confundirlo con polimorfismo. En definitiva: La sobrecarga se resuelve en tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelve en tiempo de ejecución del programa, esto es, mientras se ejecuta, en función de la clase a la que pertenece el objeto.
  • 11. FUNCIONES VIRTUALES   El polimorfismo en tiempo de ejecución es logrado por una combinación de dos características: 'Herencia y funciones virtuales". Aprendió sobre la herencia en el capitulo precedente. Aquí, aprenderá sobre función virtual.  Una función virtual es una función que es declarada como 'virtual' en una clase base y es redefinida en una o mas clases derivadas. Además, cada clase derivada puede tener su propia versión de la función virtual. Lo que hace interesantes a las funciones virtuales es que sucede cuando una es llamada a través de un puntero de clase base ( o referencia ). En esta situación, C++ determina a cual versión de la función llamar basándose en el tipo de objeto apuntado por el puntero. Y, esta determinación es hecha en 'tiempo de ejecución'. Además, cuando diferentes objetos son apuntados, diferentes versiones de la función virtual son ejecutadas.
  • 12. PORQUE FUNCIONES VIRTUALES  Como se declaraba en el inicio de este capítulo, las funciones virtuales en combinación con tipos derivados le permiten a C++ soportar polimorfismo en tiempo de ejecución. El polimorfismo es esencial para la programación orientada a objetos por una razón: Esta permite a una clase generalizada especificar aquellas funciones que serán comunes a todas las derivadas de esa clase, mientras que permite a una clase derivada definir la implementación específica de algunos o todas de esas funciones. A veces esta idea es expresada como: La clase base dicta la 'interface' general que cualquier objeto derivado de esa clase tendrá, pero permite a la clase derivada definir el método actual usado para implementar esa interface. De ahí que la frase "una interface múltiples métodos" sea usada a menudo para describir el polimorfismo.
  • 13. Parte del truco de aplicar el polimorfismo de una manera satisfactoria es comprender que la clase base y derivada forman una jerarquía, la cual se mueve de mayor a menor generalización (base a derivada). Diseñada correctamente, la clase base provee todos los elementos que una clase derivada puede usar directamente. También define cuales funciones la clase derivada debe implementar por su cuenta. Esto permite a la clase derivada la flexibilidad para definir sus propios métodos, y aun mantener un interface consistente. Eso es, como la forma de la interface es definida por la clase base, cualquier clase derivada compartirá esa interface común. Además, el uso de funciones virtuales hace posible para la clase base definir interfaces genéricas que serán usada por todas las clases derivadas. En este punto, usted debe preguntarse a si mismo porque una consistente interface con múltiples implementaciones es importante. La respuesta, nuevamente, no lleva a la fuerza central manejadora detrás de la programación orientada a objetos: Esta ayuda al programador a manejar programas de complejidad creciente.
  • 14. FUNCIONES VIRTUALES PURAS Y CLASES ABSTRACTAS   Como se ha visto, cuando una funcion virtual que no es redefinida en una clase derivada es llamada por un objeto de esa clase derivada, la version de la funcion como se ha definido en la clase base es utilizada. Sin embargo, en muchas circunstancias, no habra una declaracion con significado en una funcion virtual dentro de la clase base. Por ejemplo, en la clase base 'figura' usada en el ejemplo anterior, la definicion de 'mostrar_area()' es simplemente un sustituto sintetico. No computara ni mostrara el area de ningun tipo de objeto. Como vera cuando cree sus propias librerias de clases no es poco comun para una funcion virtual tener una definicion sin significado en el contexto de su clase base.