c++高階-1-模板

文章目錄

  • 模板
    • 一、模板基本語法
    • 二、函數模板
      • 1.基本語法
      • 2.函數模板注意事項
      • 3.普通函數和函數模板區別
      • 4.普通函數和函數模板調用規則
    • 三、類模板
      • 1.基本語法
      • 2.類模板和函數模板的區別
      • 3.類模板中成員函數調用時機
      • 4.類模板對象做函數參數
      • 5.類模板與繼承
      • 6.成員函數的類外實現

模板

一、模板基本語法

template <typename T>
  • template – 聲明創建模板。
  • typename —表明其后面的符號是一種數據類型,可使用class代替。
  • T —通用的數據類型,名稱可以替換,通常用大寫字母。

二、函數模板

1.基本語法

template<typename T>
void swap(T& a,T& b)
{T temp = a;a = b;b = a;
}

使用這個模板,有2種調用方法。

//1.自動類型推到
int a = 10;
int b = 20;
swqp(a,b);//2.顯示指定數據類型
swap<int>(a,b);

2.函數模板注意事項

  • 自動類推導,必須推導出相同的數據類型,才可以使用。
  • 模板必須確定數據類型T才可以使用。

3.普通函數和函數模板區別

  1. 普通函數調用時可以實現隱式類型轉換。
  2. 函數模板使用自動類型推導,不可以實現隱式類型轉換。
  3. 函數模板使用顯示指定類型,可以實現隱式類型轉換。
普通函數函數模板-自動類型推導函數模板-顯示指定類型
隱式類型轉換×

4.普通函數和函數模板調用規則

  • 如果函數模板和普通函數都可以調用,優先調用普通函數。
  • 可以使用空模板參數列表,調用模板函數。
  • 函數模板可以發生函數重載。
  • 如果函數模板可以產生更好的匹配,優先調用函數模板。
void print(int a,int b)
{cout << "普通函數" << endl;cout << a << endl;cout << b << endl;
}template<typename T>
void print(T a,T b)
{cout << "模板函數" << endl;cout << a << endl;cout << b << endl;
}template<typename T>
void print(T a,T b,T c)
{cout << "模板函數" << endl;cout << a << endl;cout << b << endl;cout << c << endl;
}int main()
{int a = 10;int b = 20;//調用普通函數print(a,b);//調用模板函數print<>(a,b);//函數重載print(a,b,10);return 0;
}

三、類模板

1.基本語法

template <typename T,typename Y>
class Persion
{
public:T name;Y age;
}

2.類模板和函數模板的區別

  • 類模板沒有自動類型推導的使用方式。
  • 類模板在模板參數列表中可以有默認參數。

//帶有默認參數
template<typename T, typename Y = int>
class Person
{
public:T name;Y age;
}

3.類模板中成員函數調用時機

類模板中的成員函數在調用時才創建。

4.類模板對象做函數參數

template<typename T1, typename T2>
class Person
{
public:T1 name;T2 age;
};
  1. 指定傳入的類型(最常用)
void test0(Person<string, int>& p)
{.....
}
  1. 參數模板化
template<typename T1,typename T2>
void test1(Person<T1,T2>& p)
{....
}
  1. 整個類模板化
template<typename T>
void test2(T& p)
{....
}

5.類模板與繼承

  • 當子類繼承的父類是一個類模板時,子類在聲明的時候,要指出父類的類型。
  • 如果不指定,編譯器無法給子類分配內存。
  • 如果想靈活指定父類中T的類型,子類也需變為類模板。
template<typename T>
class Base
{T name;
};//指定父類的類型
class Son:public Base<int>
{};//子類變為模板類
template<typename T>
class Son :public Base<T>
{
};

6.成員函數的類外實現

template<typename T1,typename T2>
class Person
{
public:T1 name;T2 age;void show();
};//成員函數類外實現
template<typename T1,typename T2>
void Person<T1,T2>::show()
{....
}

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

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

相關文章

Ansys Zemax|場曲跟畸變圖的前世今生

實現 OpticStudio通過在X和Y方向&#xff08;弧矢和子午方向&#xff09;的傍軸光線追蹤確定近軸圖像平面的Z坐標&#xff0c;并測量該近軸焦平面與系統圖像平面的Z坐標之間的距離。 切向數據是沿Z軸從圖像平面到近軸圖像平面在切向&#xff08;YZ&#xff09;平面測量的距離…

Qt Creator配置以及使用Git

Qt Creator配置以及使用Git 引言一、Qt Creator配置git二、Qt Creator使用git2.1 創建git倉庫 or git項目導入Qt2.2 配置遠端&#xff0c;拉代碼 or 上傳代碼2.3 查看更改2.4 更多細節可參考官方文檔 三、參考的博客以及文檔 引言 Qt Creator配置Git之后&#xff0c;可以看作是…

【AIGC】DiffuToon:穩定的視頻卡通化技術方案

論文&#xff1a;https://arxiv.org/pdf/2401.16224 github&#xff1a;https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/Diffutoon 網絡結構 兩個主要分支&#xff1a;主要的卡通化管線和編輯分支 重要技術 使用了fastblend(無需模型的視頻幀之間的平滑…

動態規劃解決0/1背包問題詳解

一、引言 在日常生活中,我們經常面臨各種選擇和決策。有些決策涉及到資源的有限性和選擇的最優性,這就需要我們運用一些算法來幫助我們做出最佳的選擇。0/1背包問題就是這樣一個經典的優化問題,它要求我們在給定的背包容量和物品集合中,選擇出總價值最大的物品組合。本文將…

不同操作系統下的換行符

1. 關鍵字2. 換行符的比較3. ASCII碼4. 修改換行符 4.1. VSCode 5. 參考文檔 1. 關鍵字 CR LF CRLF 換行符 2. 換行符的比較 英文全稱英文縮寫中文含義轉義字符ASCII碼值操作系統Carriage ReturnCR回車\r13MacIntosh&#xff08;早期的Mac&#xff09;LinefeedLF換行/新行\…

C++程序演示如何使用類和對象進行簡單的面向對象編程。

下面是一個簡單的C程序示例&#xff0c;展示了如何使用類和對象進行面向對象編程。這個示例定義了一個名為Person的類&#xff0c;它包含私有成員變量&#xff08;姓名和年齡&#xff09;以及公共成員函數&#xff08;用于設置和獲取這些成員變量的值&#xff09;。然后&#x…

【C語言】指針經典例題

題1&#xff1a; #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的結果是什么&#xff1f; 解答如下&#xff1a; 題2&#xff1a; #include <std…

提取含日期字符串并格式化輸出

背景 OCR識別的字符串中&#xff0c;日期類型存在字符串中&#xff0c;需要提取出來&#xff0c;并格式化 環境以及依賴package NStudyPy0.0.12 NStudyPy 工具包 , 一個有用的工具包&#xff0c;可以簡化開發流程&#xff0c;詳細介紹可以參考 NStudyPy 本教程使用 python 3.10…

Coze終于頂不住了?開始收費了

&#x1f914;各位老鐵都知道&#xff0c;之前Coze以免費出圈&#xff0c;香碰碰&#xff0c;字節一個月幾個億補貼用戶。現在終于頂不住了&#xff0c;開始收費了&#xff01; 我們來看看具體情況吧&#xff01; &#x1f4b8;收費情況一覽 目前國內版本還沒有開始收費&#x…

VisActor vs ECharts: 哪個更適合你的數據可視化需求?

VisActor vs ECharts: 哪個更適合你的數據可視化需求&#xff1f; 在當今數據驅動的世界里&#xff0c;選擇合適的數據可視化工具是至關重要的。ECharts作為廣受歡迎的可視化庫&#xff0c;已經在行業內擁有了長久的歷史和廣泛的用戶基礎。然而&#xff0c;VisActor作為新興的…

企業該如何選擇工時管理工具?

在數字化時代&#xff0c;企業的管理效率直接關系到其市場競爭力。工時管理作為企業管理的重要一環&#xff0c;不僅關乎員工的工作效率&#xff0c;還直接影響到企業的成本控制和決策質量。那么&#xff0c;面對市場上琳瑯滿目的工時管理工具&#xff0c;企業應該如何做出明智…

麒麟v10-yum下載命令

1、下載抓包工具 tcpdump下載時只能直接安裝&#xff1b;想要cp到其他機器的時候就需要用到其他命令了。 2、yum命令只下載不安裝 yum install tcpdump --downloadonly 3、下載完成后&#xff0c;安裝包的路徑 /var/cache/dnf/ks10-adv-os-0c2e217e51b7a335/packages/tcpdump…

前端基礎--Vue3核心語法

vue的核心語法 簡單入門 Vue3向下兼容Vue2語法&#xff0c;且Vue3中的模板中可以沒有根標簽 <template><div class"person"><h2>姓名&#xff1a;{{name}}</h2><h2>年齡&#xff1a;{{age}}</h2><button click"chang…

關于ant design vue 使用Modal無法關閉彈窗的解決思路

文章目錄 1: 出現問題的版本2.出現問題&#xff08;1&#xff09;ant design 的問題&#xff08;2&#xff09;poina的提示報錯 3.正確版本總結 1: 出現問題的版本 "ant-design-vue": "^3.2.20", "pinia": "^2.1.7", "vue"…

人工智能工具在軟件開發中的作用與未來展望

隨著生成式人工智能&#xff08;AIGC&#xff09;的迅猛發展&#xff0c;軟件開發領域正經歷著深刻的變革。從代碼生成、錯誤檢測到自動化測試&#xff0c;AI工具正在逐漸成為開發者的重要助手。然而&#xff0c;這也引發了對開發者職業前景和技能需求變化的廣泛討論&#xff1…

好看的風景視頻素材在哪下載啊?下載風景視頻素材網站分享

隨著短視頻和自媒體的興起&#xff0c;美麗的風景視頻不僅能讓人眼前一亮&#xff0c;更能吸引大量觀眾。無論是旅游博主分享那些令人心曠神怡的旅行片段&#xff0c;還是視頻編輯師尋找背景素材來增強作品的視覺效果&#xff0c;高質量的風景視頻素材需求量巨大。以下是幾個下…

Radio專業術語筆記

在收音機的 RDS (Radio Data System) 功能中&#xff0c;CT 代表 “Clock Time”。RDS 是一種數字廣播標準&#xff0c;用于在調頻廣播中傳輸輔助數據&#xff0c;如電臺名稱、節目類型、交通信息等。CT 功能是其中的一部分&#xff0c;用于同步和顯示廣播電臺發送的當前時間。…

【干貨】SaaS企業使用PLG模式實現用戶自增長與留存的三大戰略

近年來越來越多toB廠商開始采用SaaS模式&#xff0c;消費者的體驗需求和購買行為也逐漸轉變。根據Forrester研究調查顯示&#xff0c;B端購買者現在越來越傾向于進行產品體驗和產品調研與評估&#xff0c;而非如傳統的方式那樣直接與銷售人員接觸。 因此&#xff0c;SaaS&…

.npy格式圖像如何進行深度學習模型訓練處理,親測可行

import torchimport torch.nn as nnimport torch.nn.functional as Fimport numpy as npfrom torch.utils.data import DataLoader, Datasetfrom torchvision import transformsfrom PIL import Imageimport json# 加載訓練集和測試集數據train_images np.load(../dataset/tra…