【小白学习C++ 教程】十五、C++ 中的template模板和泛型
@Author:Runsen
template模板在 C++ 中一個簡單但非常強大的工具。簡單的想法是將數據類型作為參數傳遞,這樣我們就不需要為不同的數據類型編寫相同的代碼。
C++ 添加了兩個新關鍵字來支持模板:template和typename。第二個關鍵字typename可以替換為關鍵字“class”。
模板可以以兩種不同的方式使用。
泛型
在學習template模板之前,了解一下泛型。在Java中學習過泛型,其實都是差不多的概念。泛型是允許類型(整數、字符串等)作為方法、類和接口的參數的想法。
例如,像數組等這樣的對象可以非常有效地使用泛型。
實現了泛型編程的方法來提高代碼的效率。通用編程使程序員能夠編寫適用于所有數據類型的通用算法。如果數據類型是整數、字符串或字符,則無需創建不同的算法。
泛型編程的優點是
- 代碼可重用性
- 避免函數重載
- 一旦編寫泛型,它可以用于多個cpp
泛型一般和模板結合使用。模板是一個簡單但非常強大的 C++ 工具。簡單的想法是將數據類型作為參數傳遞,這樣我們就不需要為不同的數據類型編寫相同的代碼。
#include <iostream> using namespace std;// 函數模板 template <typename T>T myMax(T x, T y) {return (x > y) ? x : y; }int main() {// intcout << myMax<int>(3, 7) << endl;// doublecout << myMax<double>(3.0, 7.0) << endl;// charcout << myMax<char>('g', 'e') << endl;return 0; }輸出:
7 7 G函數模板
函數模板用于創建一組將相同算法應用于不同數據類型的函數。
#include<iostream> using namespace std; template <class A> A addition(A x, A y) {return ( x + y ); } int main() {cout<<"Addition1 : "<<addition(4,4)<<endl;cout<<"Addition2 : "<<addition(4.2,3.6)<<endl;cout<<"Addition3 : "<<addition(4.0,4.7)<<endl;return 0; }輸出:
Addition1 : 8 Addition2 : 7.8 Addition3 : 8.7如果執行cout<<"Addition3 : "<<addition(4,4.7)<<endl;,將會報錯。
值 4 & 4.7,它將是不同的整數和浮點數;而泛型函數聲明兩個參數的數據類型相同。
類模板
與函數模板一樣,可以為通用類操作創建類模板。
有時,需要一個對都相同的類實現,只是使用的數據類型不同。
類模板可以輕松地為所有數據類型重用相同的代碼。
以下是類模板的語法:
template <class T> class className {... .. ... public:T var;T someOperation(T arg);... .. ... };在上面的聲明中,T是模板參數,它是所用數據類型的占位符。
在類體內部,一個成員變量 var和成員函數someOperation()都是類型T。
創建類模板對象,需要在< >內部定義數據類型。
類名<數據類型> 類對象;下面使用類模板對兩個數字進行加減乘除的程序
#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;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; } };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();return 0; }輸出如下:
Int results: Numbers are: 2 and 1. Addition is: 3 Subtraction is: 1 Product is: 2 Division is: 2Float results: Numbers are: 2.4 and 1.2. Addition is: 3.6 Subtraction is: 1.2 Product is: 2.88 Division is: 2Code:使用函數模板顯示求數組中的最小數。
#include <iostream> using namespace std;template <class T, int max> int arrMin(T arr[], int n) {int m = max;for (int i = 0; i < n; i++)if (arr[i] < m)m = arr[i];return m; }int main() {int arr1[] = {10, 20, 15, 12};int n1 = sizeof(arr1)/sizeof(arr1[0]);char arr2[] = {1, 2, 3};int n2 = sizeof(arr2)/sizeof(arr2[0]);cout << arrMin<int, 10000>(arr1, n1) << endl;cout << arrMin<char, 256>(arr2, n2);return 0; }總結
以上是生活随笔為你收集整理的【小白学习C++ 教程】十五、C++ 中的template模板和泛型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MESUX米岫的品牌核心是什么呢?有了解
- 下一篇: 【小白学习tensorflow教程】二、