C++——模板詳解

目錄

模板

函數模板

顯示實例化

類模板

模板特點


模板

????????模板,就是把一個本來只能對特定類型實現的代碼,變成一個模板類型,這個模板類型能轉換為任何內置類型,從而讓程序員只需要實現一個模板,就能對不同的數據進行操作。模板分為函數模板類模板

????????模板使用格式:template<typename T1, typename T2,......,typename Tn>;也可以為:template<class T1, class T2,......,class Tn>

函數模板

????????函數模板,就是用模板來實現一個函數,從而讓這個函數可以供任何內置類型使用,例如下圖:

????????我們定義T為模板,那么T就可以為任何內置類型,當傳入不同類型時,編譯器都會自動對應上。當然下面swap(a,b)和swap(c,d)也不是同個swap函數,而是編譯器根據我們形參的類型,從而把T轉換為形參的類型,然后生成一個swap函數。圖中代碼會生成一個形參是int類型的函數和一個形參是double類型的函數。

????????編譯器根據我們給的類型,在根據函數模板,生成對應類型的函數;這個過程叫模板的實例化

????????如果swap的兩個傳參不是同個傳參,但函數模板里是同個模板T,就會無法編譯;這時候只能用顯示實例化來強行讓兩個傳參為顯示實例化的類型。

顯示實例化

????????進行模板實例化時,還可以顯示實例化。即使用模板函數的時候,強制后面的形參為我們所要求的類型。使用方法為:函數模板名<類型>(對象1,對象2....);強制讓對象1和對象2為前面<>內輸入的類型。

????????比如下圖,直接用add(a,b)是編譯不過的,但用了顯示實例化就可以強行讓a和b都為int類型,再生成一個int類型的add函數,進行調用。

類模板

????????類模板,就是把模板的類型放入類中,這樣在我們類的對象實例化的時候,就可以自主選擇需要創建的對象的類型。

????????注意:類模板創建對象時必須進行顯示實例化

????????類模板不能聲明定義分離到兩個文件,在一個文件內進行聲明定義分離時,定義部分要包含域和模板類型,而且在定義的上方要在聲明一次模板。(因為上面聲明的模板,是在class內使用,下面再次聲明的模板是在函數內使用)具體使用方式如下圖所示:

模板特點

????????模板不能聲明定義分離。

????????模板只能定義一行使用一行,當模板被使用于函數或者中后,不能再放入其他函數或者類中。

????????當模板名字和我們自己定義的函數名沖突時,不會報錯;當我們調用函數時,編譯器會先找有沒有形參對應上的非模板函數,找不到才會實例化模板。但如果使用了顯示實例化則會強制調用模板,進行模板實例化。??

????????模板函數不允許自動類型轉換,如果類型不同,則編譯不了,只能用顯示實例化;但普通函數可以進行自動類型轉換。

????????模板可以具有非類型參數(模板可以變為任何內置類型,內置類型有大有小),用于指定大小,可以根據指定的大小創建動態結構,所以模板可以用來創建動態增大或減小的數據結構

????????模板運行時不檢查數據類型相當于類型的宏替換,不保證安全。

????????類模板是一個類家族,模板類是通過類模板實例化的具體類。

????????C++中類模板的聲明格式為template<模板形參表聲明><類聲明>,并且類模板的成員函數都是模板函數。因為模板可以轉為任何類型,所以在類模板中,每個成員函數都有一個this指針代表自己,就會包含這個模板,所以成員函數就是模板函數。比如一個Stack類模板,里面的成員函數一定都是對Stack的數據進行修改操作,而Stack的數據類型是由模板控制的,所以Stack類中的成員函數就都是模板函數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718121.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718121.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA-串口接收圖像寫入RAM并讀出在TFT顯示屏上顯示

系統框圖&#xff1a; 需要用到的模塊有&#xff1a; 1&#xff0c;UART_RX(串口接收模塊)&#xff1b; 2&#xff0c;串口接受的數據存放到RAM模塊&#xff1b; 3&#xff0c;RAM IP核&#xff1b; 4&#xff0c;時鐘IP核 &#xff08;TFT顯示屏驅動時鐘的產生&#xff09…

kafka同步副本集及關鍵參數

上篇文章講了副本機制是什么&#xff0c;一文讀懂kafka內部怎么運行的-CSDN博客 這里深挖下同步副本集及里面的關鍵參數。副本會去leader副本拉去數據追加到自己日志中。 我們知道kafka副本的作用是提高系統的高可用。當leader副本掛了時&#xff0c;會從候選副本集中選者一個當…

java-冪等性

冪等性 1.1冪等性定義&#xff1a; 在計算機領域中&#xff0c;冪等&#xff08;Idempotence&#xff09;是指任意一個操作的多次執行總是能獲得相同的結果&#xff0c;不會對系統狀態產生額外影響。在Java后端開發中&#xff0c;冪等性的實現通常通過確保方法或服務調用的結…

設計模式(十四)中介者模式

請直接看原文: 原文鏈接:設計模式&#xff08;十四&#xff09;中介者模式_設計模式之中介模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 寫了很多篇設計模式的…

Ribbon實現Cloud負載均衡

安裝Zookeeper要先安裝JDK環境 解壓 tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /usr/local/develop 配置JAVA_HOME vim /etc/profile export JAVA_HOME/usr/local/develop/jdk1.8.0_191 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOM…

npm install 一直在等待sill idealTree buildDeps

最近在整vue的前端項目&#xff0c;npm install的時候一直在等待&#xff0c;記錄下處理過程。 1.檢查當前npm鏡像的地址 輸入命令&#xff1a;"npm config get registry"&#xff0c;如果結果是"https://registry.npmjs.org/"。 更換下地址&#xff0c…

Windows Server 各版本搭建文件服務器實現共享文件(03~19)

一、Windows Server 2003 打開服務器&#xff0c;點擊左下角開始?管理工具?管理您的服務器?添加或刪除角色 點擊下一步等待測試 勾選自定義配置&#xff0c;點擊下一步 選擇文件服務器&#xff0c;點擊下一步 勾選設置默認磁盤空間&#xff0c;數據自己更改&#xff0c;最…

【JavaEE】_Spring MVC 項目傳參問題

目錄 1. 傳遞單個參數 1.1 關于參數名的問題 2. 傳遞多個參數 2.1 關于參數順序的問題 2.2 關于基本類型與包裝類的問題 3. 使用對象傳參 4. 后端參數重命名問題 4.1 關于RequestPara注解 1. 傳遞單個參數 現創建Spring MVC項目&#xff0c;.java文件內容如下&#xff…

2024年3月計劃

根據規劃&#xff0c;為了要考慮把產品代碼吃透。先對于計算幾何&#xff0c;圖像處理&#xff0c;測量學基礎進行 當然&#xff0c;也要把ue繼續進行著。ue的rpg和底層渲染。收集下虛幻商城的免費資源&#xff0c;萬一以后做獨立游戲用得到。其他的可以暫時不進行。因為ue的工…

Apache Flink連載(三十七):Flink基于Kubernetes部署(7)-Kubernetes 集群搭建-3

?? 個人主頁:IT貧道-CSDN博客 ?? 私聊博主:私聊博主加WX好友,獲取更多資料哦~ ?? 博主個人B棧地址:豹哥教你學編程的個人空間-豹哥教你學編程個人主頁-嗶哩嗶哩視頻 目錄

AI-數學-高中-32-概率-樣本空間與隨機事件

原作者視頻&#xff1a;【概率】【一數辭典】1樣本空間與隨機事件_嗶哩嗶哩_bilibili 1.隨機試驗&#xff1a; 2.樣本點、樣本空間、有限樣本空間&#xff1a; 示例1 示例2 3.事件&#xff1a; 示例&#xff1a;

PAT基礎練習

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”&#xff0c;要求按下列格式打印 ************ *****所謂“沙漏形狀”&#xff0c;是指每行輸出奇數個符號&#xff1b;各行符號中心對齊&#xff1b;相鄰兩行符號數差2&#xff1b;符號數先從大到小順序遞減…

自己本地模擬內存數據庫增刪改查

目錄 學習初衷準備代碼實現結果感謝閱讀 學習初衷 用于滿足自己的測試要求&#xff0c;不連接數據庫&#xff0c;也不在意數據丟失 準備 maven依賴 org.springframework.boot spring-boot-starter-test test 代碼實現 內存數據庫&#xff08;InMemoryDatabase&#xff0…

[AutoSar]BSW_Com08 CAN driver 模塊介紹及參數配置說明 (二)

目錄 關鍵詞平臺說明一、CanControllers二、CanTxProcessing三、CanFilterMask四、CanHardwareObjects五、CanGeneral 關鍵詞 嵌入式、C語言、autosar、OS、BSW 平臺說明 項目ValueOSautosar OSautosar廠商vector &#xff0c;芯片廠商TI 英飛凌編程語言C&#xff0c;C編譯器…

游戲引擎分層簡介

游戲引擎分層架構&#xff08;自上而下&#xff09; 工具層&#xff08;Tool Layer&#xff09; 在一個現代游戲引擎中&#xff0c;我們最先看到的可能不是復雜的代碼&#xff0c;而是各種各樣的編輯器&#xff0c;利用這些編輯器&#xff0c;我們可以制作設計關卡、角色、動畫…

數據類型和變量

1.數據類型 在Java中數據類型主要分為兩類&#xff1a;基本數據類型和引用數據類型。 基本數據類型有四類八種&#xff1a; 1. 四類&#xff1a;整型、浮點型、字符型以及布爾型 2.八種&#xff1a; 整形是分為如上四種 byte short int long 浮點型分為 float 和double …

Docker Compose系列--搭建halo與mysql

原文網址&#xff1a;使用Docker Compose系列--搭建halo與mysql_IT利刃出鞘的博客-CSDN博客 簡介 說明 本文介紹如何使用Docker Compose搭建halo與mysql。 官網網址 使用 Docker 部署 Halo 和 MySQL | Halo Documents Docker Compose搭建mysql 見&#xff1a;Docker Com…

【大廠AI課學習筆記NO.64】機器學習開發框架

機器學習開發框架本質上是一種編程庫或工具&#xff0c;目的是能夠讓開發人員更容易、更快速地構建機器學習模型。 機器學習開發框架封裝了大量的可重用代碼&#xff0c;可以直接調用&#xff0c;目的是避免“重復造輪子’大幅降低開發人員的開發難度&#xff0c;提高開發效率…

軟考高級:候選碼、主碼、全碼、外碼、主屬性、主鍵、主關鍵字、非主屬性概念和例題

一、AI 講解 候選碼、主碼、全碼、外碼、主屬性、主鍵、主關鍵字、非主屬性是數據庫設計和數據建模中的基本概念&#xff0c;特別是在關系數據庫模型中。下面將對這些概念進行簡單講解&#xff0c;并給出相應的例子。 概念講解 候選碼&#xff08;Candidate Key&#xff09;…

Spring框架精髓:帶你手寫IoC

個人名片&#xff1a; &#x1f43c;作者簡介&#xff1a;一名大三在校生&#xff0c;喜歡AI編程&#x1f38b; &#x1f43b;???個人主頁&#x1f947;&#xff1a;落798. &#x1f43c;個人WeChat&#xff1a;hmmwx53 &#x1f54a;?系列專欄&#xff1a;&#x1f5bc;?…