Comprensión de C ++: plantillas

comprensión

Conexión de referencia:

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 clase

className 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;
}

Supongo que te gusta

Origin blog.csdn.net/QLeelq/article/details/111059310
Recomendado
Clasificación