1. 程式人生 > >C++筆記 第五十八課 類模板的概念和意義---狄泰學院

C++筆記 第五十八課 類模板的概念和意義---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux

第五十八課 類模板的概念和意義

1.思考

在C++中是否能夠將泛型的思想應用於類?

2.類模板

一些類主要用於儲存和組織資料元素
類中資料組織的方式和資料元素的具體型別無關
如:陣列類,連結串列類,Stack類,Queue類,等
C++中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能。
C++中的類模板
以相同的方式處理不同的型別
在類宣告前使用template進行標識
用於說明類中使用的泛指型別T
在這裡插入圖片描述
類模板的應用
只能顯示指定具體型別,無法自動推導
使用具體型別定義物件
在這裡插入圖片描述


宣告的泛指型別T可以出現在類模板的任意地方
編譯器對類模板的處理方式和函式模板相同
從類模板通過具體型別產生不同的類
在宣告的地方對類模板程式碼本身進行編譯—第一次編譯
在使用的地方對引數替換後的程式碼進行編譯—第二次編譯

58-1 類模板初探

#include<iostream>
#include<string>
using namespace std;
template<typename T>
class Operator
{
public:
    T add(T a, T b)
    {
	return a + b;
    }
    T minus(T a, T b)
    {
	return a - b;
    }
    T multiply(T a, T b)
    {
	return a * b;
    }
    T divide(T a, T b)
    {
	return a / b;
    }
};
string operator-(string& l, string& r)
{
    return "Minus";
}
int main()
{
    Operator<int> op1;
    cout << op1.add(1,2) << endl;
    Operator<string> op2;
    cout << op2.add("D.T.", "Software") << endl;
    cout << op2.minus("D.T.", "Software") << endl;
    return 0;
}
執行結果
3
D.T.Software
Minus

類模板的工程應用–只是工程中應用的規則,經驗做法,不是C++規則
類模板必須在標頭檔案中定義
類模板不能分開實現在不同的檔案中
類模板外部定義的成員函式需要加上模板<>宣告

58-2 模板類的工程應用

Operator.h
#ifndef _OPERATOR_H_
#define _OPERATOR_H_
template<typename T>
class Operator
{
public:
    T add(T a, T b);
    T minus(T a, T b);
    T multiply(T a, T b);
    T divide(T a, T b);
};
template<typename T>
T Operator<T>::add(T a,T b)
{
    return a + b;
}
template<typename T>
T Operator<T>::minus(T a,T b)
{
    return a - b;
}
template<typename T>
T Operator<T>::multiply(T a,T b)
{
    return a * b;
}
template<typename T>
T Operator<T>::divide(T a,T b)
{
    return a / b;
}
#endif
58-2.cpp
#include<iostream>
#include<string>
#include "Operator.h"
using namespace std;
int main()
{
    Operator<int> op1;
    cout << op1.add(1,2) << endl;
    cout << op1.minus(5,6) << endl;
    cout << op1.multiply(4,5) << endl;
    cout << op1.divide(10,5) << endl;
    return 0;
}
執行結果
3
-1
20
2

小結
泛型程式設計的思想可以應用於類
類模板以相同的方式處理不同型別的資料
類模板非常適用於編寫資料結構相關的程式碼
類模板在使用時只能顯示指定型別