Pract met de la program templa
-
Upload
ivan-ramirez-iglesias -
Category
Documents
-
view
224 -
download
0
Transcript of Pract met de la program templa
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 ] << " ";
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;
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;
}
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.