Reklama

El uso de plantillas en C++

Nuestra clase IntArray es una buena alternativa integrado en una matriz de números enteros. Pero en la vida pueden requerir matrices para diferentes tipos de datos. Se puede suponer, que la única diferencia entre la matriz de elementos de tipo double de nuestro es un tipo de datos en los anuncios, el resto del código coincide literalmente.
Для решения данной проблемы в С++ введен механизм plantillas. В объявлениях классов и функций допускается использование parámetros de los tipos de. Tipos de valores se sustituyen en el proceso de compilación de los verdaderos tipos de, integrados o definidos por el usuario. Podemos crear una plantilla de la clase Array, sustituyendo en la clase IntArray el tipo de los elementos de la int en la síntesis de un tipo de parámetro. Позже мы конкретизируем tipos de opciones, sustituyendo en lugar de ellos, los tipos reales int, double y string. El resultado será una manera de utilizar estos concreción de tan, como si en realidad, hemos definido tres clases diferentes para los tres tipos de datos.
He aquí el aspecto que puede tener una plantilla de clase Array:

La palabra clave template dice, que se establece la plantilla, las opciones que aparecen entre corchetes angulares (<>). En nuestro caso, sólo hay una opción elemType; la palabra clave class antes de que su nombre indica, que este parámetro es el tipo de.
La concreción de la clase de plantilla Array opción elemType se sustituye por el tipo real cada vez que se utiliza, como se muestra en el ejemplo:

Se definen tres de la instancia de la clase Array:

Lo que hace el compilador, llegando a este anuncio? Sustituye el texto de la plantilla Array, sustituyendo la opción elemType en el tipo de, que se especifica en cada caso. Por lo tanto, la declaración de los miembros adquieren en el primer caso, este tipo de:

Tenga en cuenta, que esto corresponde exactamente a la definición de la matriz IntArray.
Para el resto de los dos casos, obtendremos el siguiente código:

Lo que sucede con las funciones de miembros? En ellos también el tipo de parámetro elemType se sustituye por el tipo real, sin embargo, el compilador no especifica las funciones, que no se producen en cualquier lugar del programa.
Cuando se ejecuta el programa de este ejemplo mostrará el siguiente resultado:

El mecanismo de plantillas puede utilizar y en la propagación de las clases. Así es como se ve la definición de la plantilla de la clase ArrayRC:

Sustitución de parámetros realistas, en lugar de el tipo de parámetro elemType ocurre como en el, y en una de las clases.

La definición se comporta de la misma manera, como la definición de IntArrayRC de la sección anterior. Cambiemos el ejemplo de uso de la sección anterior.

Ante todo, para оператор // la función de swap() también se debe hacer la plantilla era válido, necesitamos presentar la función de swap() en forma de la plantilla.

Cada vez que se llama swap() se genera una adecuada determinación de la, que depende del tipo de matriz. Así es como se ve el programa, utiliza las plantillas Array y ArrayRC:

Reklama