最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C/C++編程筆記:C++ 模板詳解(二)類(lèi)模板的概念和基本使用方式

2020-04-02 15:58 作者:C語(yǔ)言編程__Plus  | 我要投稿

與函數(shù)模板類(lèi)似地《C/C++編程筆記:C++模板詳解(一)函數(shù)模板的概念和特性》(UP兩天前發(fā)布的文章),類(lèi)也可以被一種或多種類(lèi)型參數(shù)化。例如,容器類(lèi)就是一個(gè)具有這種特性的典型例子,它通常被用于管理某種特定類(lèi)型的元素。只要使用類(lèi)模板,我們就可以實(shí)現(xiàn)容器類(lèi),而不需要確定容器中元素的類(lèi)型。

一、類(lèi)模板的實(shí)現(xiàn)

在這篇博文中,我們使用Stack作為類(lèi)模板的例子。

(1.1) 類(lèi)模板的聲明

如上所示,類(lèi)模板的聲明和函數(shù)模板的聲明很相似:在聲明之前,我們先聲明參數(shù)類(lèi)型的標(biāo)識(shí)符

當(dāng)然,也可以使用關(guān)鍵字class來(lái)代替typename。在類(lèi)模板的內(nèi)部,類(lèi)型T可以像其它的類(lèi)型一樣,用于聲明成員變量和成員函數(shù)。在這個(gè)例子中,類(lèi)的類(lèi)型是Stack<T>,其中T是模板參數(shù)。因此,當(dāng)在聲明中需要使用該類(lèi)的類(lèi)型時(shí),我們必須要使用Stack<T>。例如,如果要聲明自己實(shí)現(xiàn)的拷貝構(gòu)造函數(shù)和賦值運(yùn)算符,那就應(yīng)該這樣來(lái)編寫(xiě):

然而, 當(dāng)需要使用類(lèi)名而不是類(lèi)的類(lèi)型時(shí),就應(yīng)該只用Stack。例如,當(dāng)指定類(lèi)的名稱,或是需要編寫(xiě)構(gòu)造函數(shù)、析構(gòu)函數(shù)時(shí),就需要使用Stack。

(1.2) 類(lèi)模板的實(shí)現(xiàn)

為了定義類(lèi)模板的成員函數(shù),我們必須要指定該成員函數(shù)是一個(gè)函數(shù)模板(使用template<typename T>),而且還需要使用這個(gè)類(lèi)模板的完整類(lèi)型限定運(yùn)算符Stack<T>::。因此,成員函數(shù)push的完整定義如下:

其它成員函數(shù)的實(shí)現(xiàn)也是類(lèi)似的;和普通類(lèi)定義相同,完全也可以將成員函數(shù)的實(shí)現(xiàn)內(nèi)聯(lián)地寫(xiě)在類(lèi)中,例如:

二、類(lèi)模板的使用

參見(jiàn)如下的main函數(shù)代碼:

注意:只有那些被調(diào)用了的成員函數(shù),才會(huì)產(chǎn)生這些函數(shù)的實(shí)例化代碼。

所以,針對(duì)這個(gè)類(lèi)模板,缺省的構(gòu)造函數(shù)、push、top方法都針對(duì)int、std::string進(jìn)行了實(shí)例化。然而,pop方法只提供了std::string的實(shí)例化。這樣做的好處是:

(1)可以節(jié)省時(shí)間和空間。

(2)對(duì)于那些未能提供所有成員函數(shù)中所有操作的類(lèi)型,也可以使用該類(lèi)型來(lái)實(shí)例化類(lèi)模板。

另一方面,如果類(lèi)中含有靜態(tài)成員,那么用來(lái)實(shí)例化的每種類(lèi)型,都會(huì)實(shí)例化這些靜態(tài)成員。

學(xué)習(xí)C/C++編程知識(shí),歡迎關(guān)注UP一起成長(zhǎng)!

C/C++編程筆記:C++ 模板詳解(二)類(lèi)模板的概念和基本使用方式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
元阳县| 财经| 余干县| 卢湾区| 信丰县| 平舆县| 禹州市| 临朐县| 临汾市| 岳西县| 阜宁县| 顺平县| 城市| 桃江县| 厦门市| 乐东| 通渭县| 祁东县| 霍邱县| 涞源县| 彭山县| 江口县| 绿春县| 红桥区| 滦南县| 卢湾区| 昌乐县| 谢通门县| 怀宁县| 丹江口市| 鲁甸县| 潼南县| 深圳市| 隆昌县| 余干县| 兰考县| 商南县| 英山县| 尉犁县| 扎鲁特旗| 皋兰县|