El concepto de polimorfismo : múltiples manifestaciones de una misma cosa, divididas en polimorfismo estático y polimorfismo dinámico.
1. El polimorfismo estático se refleja en tiempo de compilación, como la sobrecarga de funciones y la programación genérica.
Sobrecarga de funciones:
- El alcance es el mismo.
- Varias funciones tienen funciones similares y tienen los mismos nombres de función.
- Los parámetros no son los mismos (diferentes tipos de parámetros, número u orden).
- Según los parámetros de la función al llamar, sepa a qué función llamar.
2. El polimorfismo dinámico , que se refleja en tiempo de ejecución, debe cumplir dos condiciones:
- La función de
determinación de función virtual no es miembro de la función virtual (reescribible), hay dos tres condiciones:
1) dos funciones miembro respectivas definidas en la clase base y una clase derivada;
2) definida en la clase base función miembro debe. Con la palabra clave virtual, las funciones miembro de la clase derivada se pueden traer o no.
3) Los dos prototipos de función miembro (nombre de función, parámetro de función, tipo de retorno de función) deben ser iguales.Nota: Si los tipos de retorno de estas dos funciones son la clase base y la clase derivada, y el valor de retorno es un puntero o referencia a la clase base y la clase derivada, también constituye una sobrescritura. Este tipo de retorno se llama covarianza .
2. Cuando llame a la función virtual del objeto , use el puntero o referencia del objeto , de modo que cuando el puntero apunte a diferentes objetos, pueda llamar a diferentes tipos de funciones miembro, reflejando así el polimorfismo.
Aquí hay un análisis del programa:
#include<iostream>
using namespace std;
class Grandam
{
public:
virtual void introduce_self()
{
cout << "I am grandam." << endl;
}
};
class Mother:public Grandam
{
public:
void introdude_self()
{
cout << "I am mother." << endl;
}
};
class Daughter :public Mother
{
public:
void introduce_self()
{
cout << "I am daughter." << endl;
}
};
int main()
{
Grandam* ptr;
Grandam g;
Mother m;
Daughter d;
ptr = &g;
ptr->introduce_self();
ptr = &m;
ptr->introduce_self();
ptr = &d;
ptr->introduce_self();
return 0;
}
El resultado se muestra en la figura:
Puede verse en los resultados que la función virtual introduce_self () versión del objeto se ejecuta cada vez, lo que refleja el polimorfismo en tiempo de ejecución.