1. 程式人生 > 其它 >理解:模板

理解:模板

技術標籤:C/C++程式設計c++

文章目錄

理解

參考連線:

模板就是實現程式碼重用機制的一種工具, 模板通常在較大的程式碼庫中使用,目的是實現程式碼的可重用性和程式的靈活性。它可以實現型別引數化,即把型別定義為引數,從而實現了真正的程式碼可重用性。模版可以分為兩類,一個是函式模版,另外一個是類模版。

1.函式模板:

  • 單個普通函式:只能處理一組資料型別。
  • 函式過載:對不同組資料進行操作
  • 單個函式模板:可以一次處理不同的資料型別,但是程式碼少

宣告方式:

//T是一個模板引數,它接受不同的資料型別(如int,float等),而class是關鍵字。可以使用關鍵字typename代替

classtemplate

T someFunction(T arg)

{ … … …}

函式模板程式碼:

#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.類模板

宣告方式:

//T是模板引數,它是所使用資料型別的佔位符。在類內部,成員變數var和成員函式someOperation()均為T型別,對於函式看看是不是需要返回值

//可以class內部呼叫,也可以用物件進行呼叫

template class className

{

… … …

public: T var;

T someOperation(T arg);

… … …

};
使用:建立類模板物件

className classObject;

例如:

className classObject;

className classObject;

className classObject;

參考程式碼:

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