Polimorfismo: cómo determinar si una función miembro es una función virtual (es decir, reescritura de funciones o cobertura)

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:

  1. El alcance es el mismo.
  2. Varias funciones tienen funciones similares y tienen los mismos nombres de función.
  3. Los parámetros no son los mismos (diferentes tipos de parámetros, número u orden).
  4. 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:

  1. 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:

Escriba la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/lxp_mujinhuakai/article/details/69399959
Recomendado
Clasificación