¿Cómo funciona el polimorfismo en c ++

Como straddler valla, C ++ soporta tanto temprana y tardía de unión. Cualquier lenguaje de programación determinado puede soportar ya sea temprano o tarde unión basada en los caprichos de sus desarrolladores. Lenguas más antiguas, como C tienden a apoyar el enlace anticipado solo. Idiomas recientes como Java y C # sólo admiten el enlace.

Usted puede estar sorprendido de que el valor predeterminado para C ++ es el primer enlace. La salida de la OverloadOverride programar la forma en que aparece es la siguiente:

Estamos en Estudiante :: calcTuitionWe're en Estudiante :: calcTuitionPress Intro para continuar ...

La razón es simple, aunque un poco anticuado. En primer lugar, C ++ tiene que actuar lo más parecido a C como sea posible de forma predeterminada para mantener la compatibilidad hacia arriba con su predecesor. En segundo lugar, el polimorfismo añade una pequeña cantidad de sobrecarga a cada llamada de función tanto en términos de almacenamiento de datos y el código necesario para realizar la llamada.

Los fundadores de C ++ estaban preocupados de que cualquier sobrecarga adicional se utilizaría como una razón para no adoptar C ++ como lenguaje del sistema de elección, por lo que hicieron el más eficiente de unión temprana del defecto.

Para hacer una polimórfica función miembro, el programador debe marcar la función con la palabra clave de C ++ virtual, como se muestra en la siguiente modificación a la declaración en el OverloadOveride programa:

clase Student {public: virtual void calcTuition () {cout lt; lt; "Estamos en Estudiante :: calcTuition" lt; lt; endl -}} -

La palabra clave virtual que dice C ++ que calcTuition () es una función miembro polimórfico. Es decir, declarando calcTuition () medios virtuales que llama a ella estarán obligados tarde si existe alguna duda en cuanto al tipo de tiempo de ejecución del objeto con el que calcTuition () se llama.

La ejecución de la OverloadOveride programa con calcTuition () virtuales declarado genera la siguiente salida:

Estamos en Estudiante :: calcTuitionWe're en GraduateStudent :: calcTuitionPress Intro para continuar ...

Si se siente cómodo con el depurador que viene con su entorno C ++, que realmente debería de un solo paso a través de este ejemplo. Es tan frío para ver el programa de un solo paso en Estudiante :: calcTuition () la primera vez que fn () se llama, pero en GraduateStudent :: calcTuition () en segunda convocatoria. No se puede apreciar verdaderamente polimorfismo hasta que lo he probado.

Es necesario declarar la función virtual sólo en la clase base. los " virtualidad " se lleva hacia abajo a la subclase de forma automática. A veces, sin embargo, los programadores siguen el estándar de codificación de declarar la función de todo el mundo virtual (virtualmente).




» » » » ¿Cómo funciona el polimorfismo en c ++