¿No sabes por dónde empezar? Ayúdanos normalizando artículos.
¿Tienes experiencia? Crea alguno de estos artículos de actualidad.

Plantillas de función en C++

Plantillas de función en C++

Plantillas de función en C++
Información sobre la plantilla
Moosader.png
Concepto:Las funciones homónimas se utilizan por lo regular para ejecutar operaciones similares sobre distintos tipos de datos.

Según va aumentando la complejidad de los programas escritos en C++ y sobre todo, de los problemas a los que se enfrentan los programadores, surge la necesidad de evitar la repetición, una y otra vez; de las mismas estructuras.

Por ejemplo, a menudo en problemas de programación se necesita implementar arrays dinámicos para diferentes tipos de objetos, o listas dinámicas, pilas, colas, árboles, etc.

El código es similar siempre, pero el programador está obligado a reescribir ciertas funciones que dependen del tipo o de la clase del objeto que se almacena.

Las plantillas (templates) permiten parametrizar estas clases para adaptarlas a cualquier tipo de dato.

Función

Las funciones homónimas se utilizan por lo regular para ejecutar operaciones similares sobre distintos tipos de datos. Si para cada tipo las operaciones son idénticas, esto se puede llevar a cabo de manera más compacta mediante plantillas de función, una capacidad introducida en versiones recientes de C++. El programador escribe una definición de plantilla de función. Basado en los tipos de los argumentos proporcionados en las llamadas a esta función, C++ genera de forma automática funciones de código objeto por separado para manejar cada tipo de llamada de forma correcta.

Todas las definiciones de plantillas de función empiezan con la palabra reservada template, seguida por una lista de parámetros formales a la plantilla de función encerrados en corchetes angulares (< y >). Cada parámetro formal es precedido por la palabra reservada class. Los parámetros formales se utilizan como tipos incorporados, o como tipos definidos por el usuario, para definir los tipos de los argumentos a la función, para definir el tipo de regreso de la función, y para declarar variables dentro de la función. A continuación se coloca la definición de función y se define como cualquier otra función.

Como utilizar funciones plantilla

  1. include <iostream.h>

template <class T> void imprime_arreglo(T *arreglo, const int cant) {

for (int i = 0; i < c; i++)
 cout << arreglo[i] << “”;

cout <<”\n”; }

void main () {

const int acant = 5, bcant = 7, ccant = 6;
 int a[acant] = {1,2,3,4,5};
  float b[bcant] = {1.1,2.2,3.3,4.4,5.5,6.6,7.7};
   char c[ccant] = “Hello”;

cout << “El arreglo A contiene : \n”;

imprime_arreglo(a, acant);
 cout << “El arreglo A contiene : \n”;
  imprime_arreglo(b, bcant);
   cout << “El arreglo A contiene : \n”;
    imprime_arreglo(c, ccant);

}

Como poner en práctica un tipo de dato abstracto

Las clases permiten que el programador modele objetos que tienen atributos y comportamientos u operaciones. Los tipos contienen miembros de datos y función miembro y en [C++] son definidos mediante la palabra reservada class.

Las funciones miembro de otros lenguajes de programación orientados a objetos a veces se llaman métodos, y son invocados en respuesta a mensajes enviados a un objeto. Un mensaje corresponde a una llamada de función miembro.

Una vez que se haya definido una clase, el nombre de la clase puede ser utilizado para declarar objetos de dicha clase. Nuestra definición de la clase debe comenzar con la palabra reservada class. El cuerpo la definición se delimita mediante llaves izquierdas y derechas. La definición de clase termina con un punto y coma.

Las partes restantes de la definición son nuevas. La etiqueta public: y prívate: se conocen como especificadores de acceso de miembro. Cualquier miembro de datos o función miembro declarado después del especificador public: es accesible, siempre que el programa tenga acceso a un objeto de la clase.Cualquier miembro de datos o función miembro declarada después de prívate: sólo es accesible a las funciones miembros de la clase.

Definición simple de la clase Time

class Time {

private:
  int hour;
  int minutes;
  int second;

public:

 Time();
  void setTime(int, int, int);
  void horaMilitar();
  void horaStandard();

};

El nombre de la clase se convierte en un nuevo especificador de tipo. Pueden existir muchos objetos de una clase, igual que pueden existir muchas variables del tipo int. El programador puede crear nuevos tipos de clase según requiera. Esta es una de las muchas razones por las que [C++] es un lenguaje extensible.

Puesta en práctica de una clase

Time::Time (){hour = minute = second = 0;}

void Time :: setTime(int h, int m, int s) {

hour = (h >= 0 && h < 24)? h: 0;

minute = (m >= 0 && m < 60)? m : 0; second = (s >= 0 && s < 60)? s : 0; }

void Time :: horaMilitar() {

cout << (hour < 10 ? “0” : “ ”) << hour << “:”
        << (minute < 10 ? “0” : “ ”) << minute << “:”
        << (second < 10 ? “0” : “ ”) << second;

}

void Time :: horaStandard() {

cout << ((hour == 0 || hour == 12) ? 12 : hour % 12)
        << “:” << (minute < 10 ? “0” : “ ”) << minute
        << “:” << (second < 10 ? “0” : “ ”) << second
        << (hour < 12 ? “AM” : “PM”);

} void main() {

Time tiempo;
 cout << “La hora militar inical es”;
  tiempo. horaMilitar();
   cout << “La hora estándar inicial es”;
    tiempo.horaStandard();

tiempo.setTime(13,27,6);

cout << “La hora militar con estos datos es”;
  tiempo. horaMilitar();
   cout << “La hora estandar con estos datos es”;
     tiempo. horaStandard();

}


Fuentes

Como funcionan las plantillas de función en C++
Funciones con plantillas como parámetros
Plantillas de función y funciones virtuales en C++
Introducción a las plantillas en C++
Programación genérica: Plantillas
Las Plantillas en C++
Uso de plantillas en C++

Enlaces externos