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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

1. 分類

1.1 定義在類模板內的成員函數

被隱式聲明為內聯函數。

1.2. 類模板外部的成員函數,

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

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

2. 特性

當我們定義一一個成員函數時,模板實參與模板形參相同。

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

對應的Blob的成員應該是這樣的: .
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函數用模板參數指出返回類型

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構造函數

構造函數的定義要以模板參數開始:

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

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

類似的,接受一個initializer_ list參數的構造函數將其類型參數T作為initializer_ list參數的元素類型:

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

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

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

這條語句中,構造函數的參數類型為initializer_ list. 列表中的每個字符串字面常量隱式地轉換為一個 string。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。