1. 程式人生 > >C++——模板---函式模板---類模板

C++——模板---函式模板---類模板

一、模板

  • 模板的引入:
    • 模板的精神:型別引數化,即型別也是一種引數。
    • template所代表的泛型程式設計是C++語言中的重要組成部分。C++是一門強型別語言,無法像動態語言(如python)那樣,編寫一段通用的邏輯,可以把任意型別的變數傳進去。泛型程式設計彌補了這一點擺脫了型別的限制,提高了程式碼的可重用性。
    • 模板是建立通用的與資料型別無關的演算法的重要手段,可實現程式碼重用。
  • 函式模板的定義與宣告:---函式模板實參推演
    • 定義:
      • template<模板引數表>返回值型別 函式名(函式形參表){......}//函式體
      • 模板引數主要是模板型別引數,尖括號中不能為空。模板型別引數由typename(或class)+識別符號構成。表示該識別符號代表一種潛在的內建或使用者自定義資料型別。
    • 宣告:
      • 函式模板的宣告與函式宣告不同,函式模板的宣告必須含變數名。因為兩者的編譯過程不一樣。函式模板必須先轉換成模板函式,再進行編譯。模板定義本身不參與編譯,而是編譯器模板的使用者使用模板時提供的型別引數生成程式碼,再進行編譯。這一過程成為模板的例項化。使用者提供不同的型別引數就會例項化出不同的程式碼。
  • 類模板的定義與宣告:---類模板例項化
    • 定義:
      • template<模板引數表> class
        類名 { //類定義體 };//注意分號不可少 templete<模板引數表>返回型別 類名<模板引數名錶>:: 成員函式名1(形參表) { ......;//成員函式定義體 }

         模板引數表有兩種:模板型別引數和非模板型別引數。

後續吃個飯回來補充!!!!