<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # C++ 模板 > 原文: [https://www.programiz.com/cpp-programming/templates](https://www.programiz.com/cpp-programming/templates) #### 在本文中,您將學習 C++ 中的模板。 您將學習如何使用模板的功能進行通用編程。 模板是 C++ 的強大功能,可讓您編寫通用程序。 簡而言之,您可以使用模板創建單個函數或類以使用不同的數據類型。 模板通常在較大的代碼庫中使用,以實現代碼的可重用性和程序的靈活性。 模板的概念可以兩種不同的方式使用: * 函數模板 * 類模板 * * * ## 函數模板 函數模板的工作方式與普通[函數](/cpp-programming/function "C++ functions")類似,但有一個按鍵差異。 單個函數模板可以一次處理不同的數據類型,但是單個普通函數只能處理一組數據類型。 通常,如果需要對兩種或更多種類型的數據執行相同的操作,則可以使用函數重載來創建具有所需函數聲明的兩個函數。 但是,更好的方法是使用函數模板,因為您可以執行較少的代碼并維護代碼來執行相同的任務。 * * * ### 如何聲明函數模板? 函數模板以關鍵字`template`開頭,后跟`< >`內的模板參數,然后是函數聲明。 ```cpp template <class T> T someFunction(T arg) { ... .. ... } ``` 在上面的代碼中,`T`是接受不同數據類型(`int`,`float`)的模板參數,而`class`是關鍵字。 您也可以使用關鍵字`typename`代替上面示例中的類。 將數據類型的參數傳遞給`someFunction( )`時,編譯器將為給定數據類型生成`someFunction()`的新版本。 * * * ### 示例 1:查找最大數量的函數模板 **使用函數模板顯示兩個數字中最大的一個的程序。** ```cpp // If two characters are passed to function template, character with larger ASCII value is displayed. #include <iostream> using namespace std; // template function template <class T> T Large(T n1, T n2) { return (n1 > n2) ? n1 : n2; } int main() { int i1, i2; float f1, f2; char c1, c2; cout << "Enter two integers:\n"; cin >> i1 >> i2; cout << Large(i1, i2) <<" is larger." << endl; cout << "\nEnter two floating-point numbers:\n"; cin >> f1 >> f2; cout << Large(f1, f2) <<" is larger." << endl; cout << "\nEnter two characters:\n"; cin >> c1 >> c2; cout << Large(c1, c2) << " has larger ASCII value."; return 0; } ``` **輸出** ```cpp Enter two integers: 5 10 10 is larger. Enter two floating-point numbers: 12.4 10.2 12.4 is larger. Enter two characters: z Z z has larger ASCII value. ``` 在上述程序中,定義了一個函數模板`Large()`,該模板接受數據類型為`T`的兩個參數`n1`和`n2`。`T`表示參數可以是任何數據類型。 `Large()`函數使用簡單的[條件操作](/cpp-programming/if-else "C++ if else")返回兩個參數中的最大值。 在`main()`函數內部,聲明了三種不同數據類型的變量:`int`,`float`和`char`。 然后將變量作為常規函數傳遞到`Large()`函數模板。 在運行時,將整數傳遞給模板函數時,編譯器知道必須生成一個`Large()`函數來接受`int`參數,并且這樣做。 同樣,當傳遞浮點數據和`char`數據時,它知道自變量數據類型并相應地生成`Large()`函數。 這樣,僅使用一個函數模板即可替換三個相同的常規函數??,并使您的代碼可維護。 * * * ### 示例 2:使用函數模板交換數據 **使用函數模板交換數據的程序。** ```cpp #include <iostream> using namespace std; template <typename T> void Swap(T &n1, T &n2) { T temp; temp = n1; n1 = n2; n2 = temp; } int main() { int i1 = 1, i2 = 2; float f1 = 1.1, f2 = 2.2; char c1 = 'a', c2 = 'b'; cout << "Before passing data to function template.\n"; cout << "i1 = " << i1 << "\ni2 = " << i2; cout << "\nf1 = " << f1 << "\nf2 = " << f2; cout << "\nc1 = " << c1 << "\nc2 = " << c2; Swap(i1, i2); Swap(f1, f2); Swap(c1, c2); cout << "\n\nAfter passing data to function template.\n"; cout << "i1 = " << i1 << "\ni2 = " << i2; cout << "\nf1 = " << f1 << "\nf2 = " << f2; cout << "\nc1 = " << c1 << "\nc2 = " << c2; return 0; } ``` **輸出** ```cpp Before passing data to function template. i1 = 1 i2 = 2 f1 = 1.1 f2 = 2.2 c1 = a c2 = b After passing data to function template. i1 = 2 i2 = 1 f1 = 2.2 f2 = 1.1 c1 = b c2 = a ``` 在該程序中,不是通過傳遞值來調用函數,而是通過引用執行了[調用](/cpp-programming/pointers-function "C++ call by reference")。 `Swap()`函數模板接受兩個參數,并通過引用交換它們。 * * * ## 類模板 與函數模板一樣,您也可以為通用類操作創建類模板。 有時,您需要一個適用于所有類的類實現,只是所使用的數據類型不同。 通常,您需要為每種數據類型創建一個不同的類,或者在一個類中創建不同的成員變量和函數。 這將不必要地浪費您的代碼庫,并且將難以維護,因為更改是應該對所有類/函數執行一個類/函數。 但是,類模板使對所有數據類型重用相同的代碼變得容易。 * * * ### 如何聲明一個類模板? ```cpp template <class T> class className { ... .. ... public: T var; T someOperation(T arg); ... .. ... }; ``` 在上面的聲明中,`T`是模板參數,它是所使用數據類型的占位符。 在類體內,成員變量`var`和成員函數`someOperation()`均為`T`類型。 * * * ### 如何創建類模板對象? 要創建類模板對象,需要在創建時在`< >`中定義數據類型。 ```cpp className<dataType> classObject; ``` 例如: ```cpp className<int> classObject; className<float> classObject; className<string> classObject; ``` * * * ### 示例 3:使用類模板的簡單計算器 程序使用類模板對兩個數字進行加,減,乘和除運算 ```cpp #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; } ``` **輸出** ```cpp Int results: Numbers are: 2 and 1. Addition is: 3 Subtraction is: 1 Product is: 2 Division is: 2 Float results: Numbers are: 2.4 and 1.2. Addition is: 3.6 Subtraction is: 1.2 Product is: 2.88 Division is: 2 ``` 在上面的程序中,聲明了一個類模板`Calculator`。 該類包含兩個`T`類型的私有成員:`num1` & `num2`,以及用于初始化成員的構造器。 它還包含公共成員函數,用于計算數字的加法,減法,乘法和除法,這些數返回用戶定義的數據類型的值。 同樣,函數`displayResult()`將最終輸出顯示到屏幕上。 在`main()`函數中,為數據類型分別創建了兩個不同的`Calculator`對象`intCalc`和`floatCalc`:`int`和`float`。 使用構造器初始化值。 請注意,在創建對象時我們使用`<int>`和`<float>`。 這些告訴編譯器用于類創建的數據類型。 這將分別為`int`和`float`創建一個類定義,然后相應地使用它們。 然后,調用兩個對象的`displayResult()`,它們執行計算器操作并顯示輸出。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看