日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

【C++基础】模板参数与模板继承

發(fā)布時(shí)間:2023/12/1 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++基础】模板参数与模板继承 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

模板參數(shù)

默認(rèn)類型參數(shù)

函數(shù)參數(shù)可以設(shè)定一個(gè)默認(rèn)值,我們現(xiàn)在可以對(duì)類模板的類型參數(shù)設(shè)定一個(gè)默認(rèn)類型。

指定泛型Stack的默認(rèn)類型參數(shù)為 int

template<typename T = int> class Stack{... };

當(dāng)我們這樣定義一個(gè)對(duì)象時(shí):

Stack<> stack;

使用默認(rèn)的方式,或者說隱式的方式,實(shí)例化了一個(gè)stack對(duì)象。

這樣的好處是:指定默認(rèn)類型之后,使用者就沒必要去寫了。

非類型參數(shù)

在模板前綴中使用非類型參數(shù)。
實(shí)例化模板時(shí),非類型實(shí)參應(yīng)該是對(duì)象。
如下:

template<typename T, int capacity> class Stack {... private:T elements[capacity];int size; }; Stack<char, 100> charStack;

如同std里面的array的初始化:std::array<int,100>;
除了基本數(shù)據(jù)類型外,非類型實(shí)參是對(duì)象的時(shí)候是這樣的;

template<typename T, Color c> class Label {... }; Color color(0,0,255); Label<char,color> label;

注意,參數(shù)默認(rèn)值必須是在最右邊,當(dāng)然我們也可以全部定義一個(gè)默認(rèn)值,這樣就不會(huì)有問題了。
注意模板成員函數(shù)的聲明也需要進(jìn)行修改。
就是這樣:

//泛型化 template <typename T = char,int N = 100> //編寫StackOfIntegers類 class Stack { private:T elements[N];int size{ 0 }; public:bool empty();T peek();T push(T value);T pop();int getSize();Stack(); }; template <typename T, int N> Stack<T,N>::Stack() {size = 0;for (auto& i : elements) {i = 0;} }

模板繼承

關(guān)于模板繼承的幾個(gè)原則:

1、普通類可從類模板實(shí)例繼承。一個(gè)模板實(shí)例化之后就是一個(gè)類了,類與類之間可以繼承。
2、模板可從普通類繼承
3、類模板可繼承類模板

也就是說,一個(gè)類是不可以從一個(gè)模板繼承的,其他的三種組合方式都是可以的。

何時(shí)何地使用模板

使用別人寫好的模板庫(kù)時(shí)
對(duì)不同類型的數(shù)據(jù)做類似處理 (算法、容器、遍歷等)

OOP or GP

泛型編程在C++中廣泛使用,經(jīng)常可以取代面向?qū)ο缶幊獭?br /> 幾乎整個(gè)C++標(biāo)準(zhǔn)庫(kù)都依賴于泛型編程。
在C++標(biāo)準(zhǔn)庫(kù)較少使用繼承和運(yùn)行時(shí)多態(tài)。異常、字符串和IO流中使用了較多的繼承。

總結(jié)

以上是生活随笔為你收集整理的【C++基础】模板参数与模板继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。