¿Cómo desarrollar una plantilla de clase en c ++

Video: Curso de C++: Plantillas de Clases con Tipos Múltiples en C++

plantillas de clase realizan el trabajo pesado de los tipos de plantilla. Se utiliza una plantilla de clase para definir objetos de casi cualquier tamaño. En la mayoría de los casos, se utiliza para representar las clases de objetos complejos o para realizar tareas mal adaptado para las plantillas de función o estructura.

Video: Crear una clase y un objeto en C++

Normalmente, las clases de código en un archivo separado utilizando el nombre de la clase como nombre de archivo. La definición de clase aparece en un archivo de cabecera, mientras que el código aparece en un archivo de código. Para hacer las cosas un poco más fácil de entender, este ejemplo evita la configuración normal y muestra el ejemplo completo utilizando un único archivo.

El ejemplo muestra una aplicación de cola especializado. Incluye muchas de las características de una cola estándar y luego añade algunas características para satisfacer las necesidades especiales de desarrollo. Colas y otros recipientes tienden a contener código complejo, pero también se necesitan para su uso con una variedad de tipos de datos, por lo que una plantilla de clase de la aplicación perfecta. los ClassTemplate ejemplo muestra el código para este ejemplo.

Video: Curso de C++ // Cap. 17 // [POO] Clases y objetos. [HD]

#incluir #incluir using namespace std-plantillaMyQueue clase {protegida: vector datos pública: void Add (T const &entrada) -void Eliminar () - printString vacío () - PrintInt vacío () - bool IsEmpty () -} - plantillaMyQueue vacío:: Añadir (T const &de entrada) {data.push_back (entrada) -} plantillaMyQueue vacío:: remove () {data.erase (data.begin ()) - plantilla}MyQueue vacío:: printString () {vector:: iterador PrintIt = data.begin () - tiempo (PrintIt = data.end ()) {cout lt; lt; *Imprímelo lt; lt; endl-PrintIt ++ - plantilla}}MyQueue vacío:: PrintInt () {vector:: iterador PrintIt = data.begin () - tiempo (PrintIt = data.end ()) {cout lt; lt; *Imprímelo lt; lt; endl-PrintIt ++ - plantilla}}MyQueue bool:: IsEmpty () {return data.begin () == data.end () -} int main () {MyQueue StringQueue-cout lt; lt; StringQueue.IsEmpty () lt; lt; endl-StringQueue.Add ("Hola") -StringQueue.Add ("Adiós") -cout lt; lt; "cuerdas de impresión: " lt; lt; endl-StringQueue.PrintString () - cout lt; lt; StringQueue.IsEmpty () lt; lt; endl-StringQueue.Remove () - cout lt; lt; "cuerdas de impresión: " lt; lt; endl-StringQueue.PrintString () - StringQueue.Remove () - cout lt; lt; StringQueue.IsEmpty () lt; lt; endl-MyQueue IntQueue-IntQueue.Add (1) -IntQueue.Add (2) -cout lt; lt; "enteros de impresión: " lt; lt; endl-IntQueue.PrintInt () - retorno 0-}

El ejemplo comienza con la clase MyQueue. Tenga en cuenta que datos es un vector, no es una cola como se podría esperar. UN cola es un adaptador - como tal, no proporciona soporte para muchas de las características que se encuentran en recipientes, tales como vector - uno de los cuales es el uso de iteradores.

Este ejemplo utiliza una iterador para la impresión, por lo que se basa en una vector, preferible a cola como punto de partida. Siempre que se crea su propia versión especializada de una construcción común, asegúrese de comenzar con el objeto correcto. De lo contrario, es posible encontrar la experiencia de la creación de la nueva clase frustrante como mínimo, imposible en el peor de los casos.

MyQueue incluye la capacidad de añadir, eliminar y elementos de impresión. Además, se puede comprobar si una cola está vacía o llena. Ya ha visto el código para estas tareas en otras partes del libro.

Puede que se pregunte sobre el código utilizado para la impresión. El ejemplo incluye métodos separados para las cadenas de impresión y enteros, lo que podría parecer contradictorio. Después de todo, ¿por qué no simplemente declarar el iterador de la siguiente manera para que acepte cualquier tipo de datos:

vector:: iterador PrintIt = data.begin () -

El problema es que el repetidor requiere un tipo de datos específico. En consecuencia, debe declarar como se muestra. De lo contrario, este mensaje de error inútil:

Video: Creacion de Clases en DevCpp

de error: se esperaba `-` antes `PrintIt`

En algún momento, que desea probar esta nueva clase mediante pasos similares a los encontrados en principal(). La prueba verifica si la cola en realidad no detecta los estados vacíos y llenos, cómo la adición y eliminación de elementos funciona, y si las rutinas de impresión funcionan. Aquí está la salida de este ejemplo:

1Printing cadenas: cadenas HelloGoodbye0Printing: enteros Goodbye1Printing: 12
Artículos Relacionados