C++中模板(Template)詳解及其作用介紹
概述
模板可以幫助我們提高代碼的可用性, 可以幫助我們減少開(kāi)發(fā)的代碼量和工作量.
函數(shù)模板
函數(shù)模板 (Function Template) 是一個(gè)對(duì)函數(shù)功能框架的描述. 在具體執(zhí)行時(shí), 我們可以根據(jù)傳遞的實(shí)際參數(shù)決定其功能. 例如:
int max(int a, int b, int c){ a = a > b ? a:b; a = a > c ? a:c; return a; } long max(long a, long b, long c){ a = a > b ? a:b; a = a > c ? a:c; return a; } double max(double a, double b, double c){ a = a > b ? a:b; a = a > c ? a:c; return a; }
寫(xiě)成函數(shù)模板的形式:
template<typename T> T max(T a, T b, T c){ a = a > b ? a:b; a = a > c ? a:c; return a; }
類(lèi)模板
類(lèi)模板 (Class Template) 是創(chuàng)建泛型類(lèi)或函數(shù)的藍(lán)圖或公式.
#ifndef PROJECT2_COMPARE_H #define PROJECT2_COMPARE_H template <class numtype> // 虛擬類(lèi)型名為numtype class Compare { private: numtype x, y; public: Compare(numtype a, numtype b){x=a; y=b;} numtype max() {return (x>y)?x:y;}; numtype min() {return (x < y)?x:y;}; };
mian:
int main() { Compare<int> compare1(3,7); cout << compare1.max() << ", " << compare1.min() << endl; Compare<double> compare2(2.88, 1.88); cout << compare2.max() << ", " << compare2.min() << endl; Compare<char> compare3('a', 'A'); cout << compare3.max() << ", " << compare3.min() << endl; return 0; }
輸出結(jié)果:
7, 3
2.88, 1.88
a, A
模板類(lèi)外定義成員函數(shù)
如果我們需要在模板類(lèi)外定義成員函數(shù), 我們需要在每個(gè)函數(shù)都使用類(lèi)模板. 格式:
template<class 虛擬類(lèi)型參數(shù)> 函數(shù)類(lèi)型 類(lèi)模板名<虛擬類(lèi)型參數(shù)>::成員函數(shù)名(函數(shù)形參表列) {}
類(lèi)模板:
#ifndef PROJECT2_COMPARE_H #define PROJECT2_COMPARE_H template <class numtype> // 虛擬類(lèi)型名為numtype class Compare { private: numtype x, y; public: Compare(numtype a, numtype b); numtype max(); numtype min(); }; template<class numtype> Compare<numtype>::Compare(numtype a,numtype b) { x=a; y=b; } template<class numtype> numtype Compare<numtype>::max( ) { return (x>y)?x:y; } template<class numtype> numtype Compare<numtype>::min( ) { return (x>y)?x:y; } #endif //PROJECT2_COMPARE_H
類(lèi)庫(kù)模板
類(lèi)庫(kù)模板 (Standard Template Library). 例如:
#include <vector> #include <iostream> using namespace std; int main() { int i = 0; vector<int> v; for (int i = 0; i < 10; ++i) { v.push_back(i); // 把元素一個(gè)一個(gè)存入到vector中 } for (int j = 0; j < v.size(); ++j) { cout << v[j] << " "; // 把每個(gè)元素顯示出來(lái) } return 0; }
輸出結(jié)果:
0 1 2 3 4 5 6 7 8 9
抽象和實(shí)例
到此這篇關(guān)于C++中模板(Template)詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 風(fēng)靡一時(shí)的連連看游戲的實(shí)現(xiàn)流程詳解
游戲“連連看”是源自臺(tái)灣的桌面小游戲,自從流入大陸以來(lái)風(fēng)靡一時(shí),也吸引眾多程序員開(kāi)發(fā)出多種版本的“連連看”。這其中,顧芳編寫(xiě)的“阿達(dá)連連看”以其精良的制作廣受好評(píng),這也成為顧方“阿達(dá)系列軟件”的核心產(chǎn)品。并于2004年,取得國(guó)家版權(quán)局的計(jì)算機(jī)軟件登記證書(shū)2021-11-11C++學(xué)習(xí)之移動(dòng)語(yǔ)義與智能指針詳解
智能指針和移動(dòng)語(yǔ)義是迄今為止,最難理解的兩個(gè)概念,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)之移動(dòng)語(yǔ)義與智能指針的相關(guān)資料,需要的朋友可以參考下2021-05-05C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換成int整形值的示例
今天小編就為大家分享一篇關(guān)于C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換成int整形值的示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解單向鏈表
鏈表可以說(shuō)是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時(shí),就可以使用鏈表,這一點(diǎn)和數(shù)組很相似2022-03-03C++中繼承與多態(tài)的基礎(chǔ)虛函數(shù)類(lèi)詳解
這篇文章主要給大家介紹了關(guān)于C++中繼承與多態(tài)的基礎(chǔ)虛函數(shù)類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09C語(yǔ)言中進(jìn)程信號(hào)集的相關(guān)操作函數(shù)詳解
這篇文章主要介紹了C語(yǔ)言中進(jìn)程信號(hào)集的相關(guān)操作函數(shù)詳解,包括sigismember函數(shù)和sigfillset函數(shù)以及sigemptyset函數(shù)的用法,需要的朋友可以參考下2015-09-09解析C語(yǔ)言中空指針、空指針常量、NULL & 0的詳解
本篇文章是對(duì)C語(yǔ)言中空指針、空指針常量、NULL & 0 進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05