pract met de la program templa
TRANSCRIPT
![Page 1: Pract met de la program templa](https://reader038.vdocuments.co/reader038/viewer/2022110308/557b280bd8b42a71798b5116/html5/thumbnails/1.jpg)
Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas
Ingº William E. Arcaya C. Docente Asociado TC
Práctica de Metodología de la Programación
Apellidos y nombres:…………………………………………………………………… Cód.Matric:……….. Fecha: ……………………….
I.- Marcar los que son verdaderos con V, y los que son falsos con F. 1.- Seleccionar la forma correcta de definición de cabecera de un template de función:
a) template (int) (*foo) (char *m[]).
b) template class foo(char *m[]).
c) template<typename T> int foo(char *m[]).
d) template<typename T, T2> T foo(T2 *m[]).
e) template<class X> void *foo(X *m[]).
2.-
a) los templates de función no pueden ser sobrecargados.
b) Cuando un template de función es sobrecargado, el compilador primero intenta emparejar con la versión
no-template de la función.
3.- a) Una plantilla (template) de clase no necesita la palabra clave template.
b) los templates de clases representan las clases genéricas. c) los templates de clases son tipos parametrizados. 4.- a) Los templates de clases pueden tener parámetros sin tipo. b) Los templates de clases que tienen parámetros sin tipo con diferentes valores son considerados como
tipos de datos diferentes.
II.- Ejemplo de template de función (a) #include <iostream>
using namespace std;
template<class Type>
Type Min(Type arg1, Type arg2)
{
Type min;
if (arg1 < arg2)
min = arg1;
else
min = arg2;
return min;
}
int main()
{
cout << Min(15, 25) << endl;
cout << Min(254.78, 12.983) << endl;
cout << Min('A', 'Z') << endl;
return 0;
}
En el ejercicio anterior sobrecargar la función Min para comparar cadenas, por
ejemplo cout<<Min(“MANZANA” , “NARANJA”);
Ejemplo de template de función (b) #include <iostream>
using std::cout;
using std::endl;
// funcion template printArray
//template< typename T >
template< class T >
void printArray( const T *array, int count )
{
for ( int i = 0; i < count; i++ )
cout << array[ i ] << " ";
![Page 2: Pract met de la program templa](https://reader038.vdocuments.co/reader038/viewer/2022110308/557b280bd8b42a71798b5116/html5/thumbnails/2.jpg)
Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas
Ingº William E. Arcaya C. Docente Asociado TC
cout << endl;
}
int main()
{
const int ACOUNT = 5;
const int BCOUNT = 7;
const int CCOUNT = 6;
int a[ ACOUNT ] = { 1, 2, 3, 4, 5 };
double b[ BCOUNT ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
char c[ CCOUNT ] = "HELLO"; // 6ta posicion para null
cout << "Array a Contiene:" << endl;
//invoca función template para enteros
printArray( a, ACOUNT );
cout << "Array b Contiene:" << endl;
// invoca función template para doubles
printArray( b, BCOUNT );
cout << "Array c Contiene:" << endl;
// invoca función template para caracteres
printArray( c, CCOUNT );
return 0;
}
III.- Ejemplo de template de clase #include <iostream>
using std::cout;
using std::endl;
template<class Type>
class CCompare
{
protected:
Type arg1;
Type arg2;
public:
CCompare(Type arg1, Type arg2)
{
CCompare::arg1 = arg1;
CCompare::arg2 = arg2;
}
~CCompare() {}
Type GetMin()
{
Type min;
if (arg1 < arg2)
min = arg1;
else
min = arg2;
return min;
}
Type GetMax()
{
Type max;
if (arg1 > arg2)
max = arg1;
else
max = arg2;
![Page 3: Pract met de la program templa](https://reader038.vdocuments.co/reader038/viewer/2022110308/557b280bd8b42a71798b5116/html5/thumbnails/3.jpg)
Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas
Ingº William E. Arcaya C. Docente Asociado TC
return max;
}
int Igual()
{
int Igual;
if (arg1 == arg2)
Igual = 1;
else
Igual = 0;
return Igual;
}
};
int main()
{
CCompare<int> compare1(15, 25);
CCompare<double> compare2(254.78, 12.983);
CCompare<char> compare3('A', 'Z');
cout << "EL OBJETO COMPARE1" << endl;
cout << "Menor: " << compare1.GetMin() << endl;
cout << "Mayor: " << compare1.GetMax() << endl;
cout << "Igual: " << compare1.Igual() << endl;
cout << endl;
cout << "EL OBJETO COMPARE2" << endl;
cout << "Menor: " << compare2.GetMin() << endl;
cout << "Mayor: " << compare2.GetMax() << endl;
cout << "Igual: " << compare2.Igual() << endl;
cout << endl;
cout << "EL OBJETO COMPARE3" << endl;
cout << "Menor: " << compare3.GetMin() << endl;
cout << "Mayor: " << compare3.GetMax() << endl;
cout << "Igual: " << compare3.Igual() << endl;
cout << endl;
return 0;
}
Ejemplo de template de clase(b) //pila.h (esto va en Header Files)
template< typename T >
class Pila
{
public:
Pila( int = 10 );
~Pila()
{
delete [] PilaPtr;
}
bool push( const T& );
bool pop( T& );
bool isEmpty() const
{
return top == -1;
}
bool isFull() const
{
return top == size - 1;
}
private:
int size;
int top;
T *PilaPtr;
};
template< typename T >
Pila< T >::Pila( int s )
: size( s > 0 ? s : 10 ),
top( -1 ),
PilaPtr( new T[ size ] )
{
}
template< typename T >
bool Pila< T >::push( const T &pushValue )
{
if ( !isFull() )
{
PilaPtr[ ++top ] = pushValue;
return true;
}
return false;
}
template< typename T >
bool Pila< T >::pop( T &popValue )
{
if ( !isEmpty() )
{
popValue = PilaPtr[ top-- ];
return true;
}
return false;
}
![Page 4: Pract met de la program templa](https://reader038.vdocuments.co/reader038/viewer/2022110308/557b280bd8b42a71798b5116/html5/thumbnails/4.jpg)
Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas
Ingº William E. Arcaya C. Docente Asociado TC
//main.cpp (esto va en Source Files)
#include <iostream>
using std::cout;
using std::endl;
#include "Pila.h"
int main()
{
Pila< double > doublePila( 5 );
double doubleValue = 1.1;
cout << "Empilar elementos de tipo double\n";
while ( doublePila.push( doubleValue ) )
{
cout << doubleValue << ' ';
doubleValue += 1.1;
}
cout << "\nPila llena. no puede empilar " << doubleValue
<< "\n\nDesapilar elmentos de pila con doubles\n";
while ( doublePila.pop( doubleValue ) )
cout << doubleValue << ' ';
cout << "\nPila vacia. no puede desapilar\n";
Pila< int > intPila;
int intValue = 1;
cout << "\nEmpilar elementos en Pila de enteros\n";
while ( intPila.push( intValue ) )
{
cout << intValue << ' ';
intValue++;
}
cout << "\nPila llena. no puede empilar " << intValue
<< "\n\ndesapilar elementos de pila de enteros\n";
while ( intPila.pop( intValue ) )
cout << intValue << ' ';
cout << "\nPila vacia. no puede desapilar" << endl;
return 0;
}
V.- Implementar una función template para ordenar un array de enteros, float o doubles.