Directorio de artículos
comprensión
Una plantilla es una herramienta para implementar un mecanismo de reutilización de código . La plantilla se usa generalmente en una base de código más grande con el propósito de lograr la reutilización del código y la flexibilidad del programa. Puede realizar la parametrización del tipo, es decir, el tipo se define como un parámetro, logrando así la reutilización real del código. Las plantillas se pueden dividir en dos categorías, una son plantillas de funciones y la otra son plantillas de clases.
1. Plantilla de función:
- Función ordinaria única : solo puede manejar un conjunto de tipos de datos.
- Sobrecarga de funciones : opere en diferentes conjuntos de datos
- Plantilla de función única : puede manejar diferentes tipos de datos a la vez, pero con menos código
Método de declaración:
// T es un parámetro de plantilla, que acepta diferentes tipos de datos (como int, float, etc.) y class es una palabra clave. Puede utilizar la palabra clave typename en su lugar
plantilla de clase
T algunaFunción (T arg)
{………}
Código de plantilla de función:
#include <iostream>
using namespace std;
// template function
//template <class T>
template <typenameT>//class和typename都可以
T Larger(T n1, T n2)
{
return (n1 > n2) ? n1 : n2;
}
int main()
{
int i1 = 10, i2 = 23;
float f1 = 3.4, f2 = 5.8;
char c1 = 'A', c2 = 'N';
cout << "输入两个整数:\n";
cout << Larger(i1, i2) <<" 更大。" << endl;
cout << "\n输入两个浮点数:\n";
cout << Larger(f1, f2) <<" 更大。" << endl;
cout << "\n输入两个字符:\n";
cout << Larger(c1, c2) << " 具有较大的ASCII值。";
return 0;
}
2. Plantilla de clase
Método de declaración:
// T es un parámetro de plantilla, que es un marcador de posición para el tipo de datos utilizado. Dentro de la clase, la variable miembro var y la función miembro someOperation () son de tipo T. Para la función, vea si necesita un valor de retorno .
// Se puede llamar desde dentro de la clase o con un objeto
plantilla clase className
{
………
public: T var;
T someOperation (T arg);
………
};
Uso: crear objeto de plantilla de claseclassName classObject;
P.ej:
className classObject;
className classObject;
className classObject;
Código de referencia:
#include <iostream>
using namespace std;
template <class T>
class Calculator
{
private:
T num1, num2;
public:
Calculator(T n1, T n2)
{
num1 = n1;
num2 = n2;
}
void displayResult()
{
cout << "Numbers are: " << num1 << " and " << num2 << "." << endl;
cout << "Addition is: " << add() << endl;//以下都是class内部调用
cout << "Subtraction is: " << subtract() << endl;
cout << "Product is: " << multiply() << endl;
cout << "Division is: " << divide() << endl;
}
T add() {
return num1 + num2; }
T subtract() {
return num1 - num2; }
T multiply() {
return num1 * num2; }
T divide() {
return num1 / num2; }
T test(){
cout<<"test"<<endl; return num1;}
};
int main()
{
Calculator<int> intCalc(2, 1);//创建类模板对象
Calculator<float> floatCalc(2.4, 1.2);//创建类模板对象
cout << "Int results:" << endl;
intCalc.displayResult();
cout << endl << "Float results:" << endl;
floatCalc.displayResult();
intCalc.test();//对象调用类模板的T成员
return 0;
}