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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数

發(fā)布時間:2025/3/21 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 分類

1.1 定義在類模板內(nèi)的成員函數(shù)

被隱式聲明為內(nèi)聯(lián)函數(shù)。

1.2. 類模板外部的成員函數(shù),

類模板的成員函數(shù)本身是一個普通函數(shù)。但是,類模板的每個實例都有其自己版本的成員函數(shù)。因此,類模板的成員函數(shù)具有和模板相同的模板參數(shù)。因而,定義在類模板之外的成員函數(shù)就必須以關(guān)鍵字template開始,后接類模板參數(shù)列表。

在類外定義一個成員時,必須說明成員屬于哪個類。從一個模板生成的類的名字中必須包含其模板實參。

2. 特性

當(dāng)我們定義一一個成員函數(shù)時,模板實參與模板形參相同。

對于StrBlob的一個給定的成員函數(shù)
ret-type StrB1ob: :member-name(parm-ist)

對應(yīng)的Blob的成員應(yīng)該是這樣的: .
template <typename T:ret-type Blob: : member-name(parm-list)

2.1 check和元素訪問成員

template <typename T> void Blob<T>: :check(size_ type i, const std: :string &msg) const {if (i >= data->size())throw std: :out_ _of_ range (msg) ; }

2.2 下標運算符和back函數(shù)用模板參數(shù)指出返回類型

template <typename T>T& Blob<T>: :back() {check(0"back on empty Blob") ;return data->back() ; } template <typename T> T& B1ob<T>: :operator[] (size_ type i) {//如果i太大,check會拋出異常,阻止訪問一個不存在的元素check(i, "subscript out of range") ;return (*data) [i]; }

在原StrBlob類中,這些運算符返回string&。而模板版本則返回一個引用,指向用來實例化Blob的類型。

2.3 Blob構(gòu)造函數(shù)

構(gòu)造函數(shù)的定義要以模板參數(shù)開始:

template <typename T> B1ob<T>: :Blob() : data (std: :make_ shared<std: :vector<T>>()){}

此構(gòu)造函數(shù)分配-一個空vector,并將指向vector的指針保存在data中。如前所述,我們將類模板自己的類型參數(shù)作為vector的模板實參來分配vector。

類似的,接受一個initializer_ list參數(shù)的構(gòu)造函數(shù)將其類型參數(shù)T作為initializer_ list參數(shù)的元素類型:

template <typename T> Blob<T>: :Blob(std: :initializer_ list<T> il) :data(std: :make_ shared<std: :vector<T>> (il) ) { }

類似默認構(gòu)造函數(shù),此構(gòu)造函數(shù)分配一個新的vector。在本例中,我們用參數(shù)il來初始化此vector. 為了使用這個構(gòu)造函數(shù),我們必須傳遞給它一一個 initializer_ list, 其中的元素必須與Blob的元素類型兼容:

Blob<string> articles = {"a", "an", "the"};

這條語句中,構(gòu)造函數(shù)的參數(shù)類型為initializer_ list. 列表中的每個字符串字面常量隱式地轉(zhuǎn)換為一個 string。

總結(jié)

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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