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

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

C++類模板入門教程

2023-03-30 13:19 作者:c語言-小新  | 我要投稿

C++ 除了支持函數(shù)模板,還支持類模板(Class Template)。函數(shù)模板中定義的類型參數(shù)可以用在函數(shù)聲明和函數(shù)定義中,類模板中定義的類型參數(shù)可以用在類聲明和類實現(xiàn)中。類模板的目的同樣是將數(shù)據(jù)的類型參數(shù)化。

聲明類模板的語法為:

template<typename 類型參數(shù)1 , typename 類型參數(shù)2 , …> class 類名{ ? ?//TODO: };

類模板和函數(shù)模板都是以 template 開頭(當然也可以使用 class,目前來講它們沒有任何區(qū)別),后跟類型參數(shù);類型參數(shù)不能為空,多個類型參數(shù)用逗號隔開。

一但聲明了類模板,就可以將類型參數(shù)用于類的成員函數(shù)和成員變量了。換句話說,原來使用 int、float、char 等內置類型的地方,都可以用類型參數(shù)來代替。

假如我們現(xiàn)在要定義一個類來表示坐標,要求坐標的數(shù)據(jù)類型可以是整數(shù)、小數(shù)和字符串,例如:

  • x = 10、y = 10

  • x = 12.88、y = 129.65

  • x = "東經(jīng)180度"、y = "北緯210度"


這個時候就可以使用類模板,請看下面的代碼:




x 坐標和 y 坐標的數(shù)據(jù)類型不確定,借助類模板可以將數(shù)據(jù)類型參數(shù)化,這樣就不必定義多個類了。

注意:模板頭和類頭是一個整體,可以換行,但是中間不能有分號。

上面的代碼僅僅是類的聲明,我們還需要在類外定義成員函數(shù)。在類外定義成員函數(shù)時仍然需要帶上模板頭,格式為:

template<typename 類型參數(shù)1 , typename 類型參數(shù)2 , …> 返回值類型 類名<類型參數(shù)1 , 類型參數(shù)2, ...>::函數(shù)名(形參列表){ ? ?//TODO: }

第一行是模板頭,第二行是函數(shù)頭,它們可以合并到一行,不過為了讓代碼格式更加清晰,一般是將它們分成兩行。

下面就對 Point 類的成員函數(shù)進行定義:


template<typename T1, typename T2> //模板頭

T1 Point<T1, T2>::getX() const /*函數(shù)頭*/ {

return m_x;

}


template<typename T1, typename T2>

void Point<T1, T2>::setX(T1 x){

? ?m_x = x;

}


template<typename T1, typename T2>

T2 Point<T1, T2>::getY() const{

return m_y;

}


template<typename T1, typename T2>

void Point<T1, T2>::setY(T2 y){

? ?m_y = y;

}


請讀者仔細觀察代碼,除了 template 關鍵字后面要指明類型參數(shù),類名 Point 后面也要帶上類型參數(shù),只是不加 typename 關鍵字了。另外需要注意的是,在類外定義成員函數(shù)時,template 后面的類型參數(shù)要和類聲明時的一致。

使用類模板創(chuàng)建對象

上面的兩段代碼完成了類的定義,接下來就可以使用該類創(chuàng)建對象了。使用類模板創(chuàng)建對象時,需要指明具體的數(shù)據(jù)類型。請看下面的代碼:


Point<int, int> p1(10, 20);

Point<int, float> p2(10, 15.5);

Point<float, char*> p3(12.4, "東經(jīng)180度");


與函數(shù)模板不同的是,類模板在實例化時必須顯式地指明數(shù)據(jù)類型,編譯器不能根據(jù)給定的數(shù)據(jù)推演出數(shù)據(jù)類型。

除了對象變量,我們也可以使用對象指針的方式來實例化:


Point<float, float> *p1 = new Point<float, float>(10.6, 109.3);

Point<char*, char*> *p = new Point<char*, char*>("東經(jīng)180度", "北緯210度");


需要注意的是,賦值號兩邊都要指明具體的數(shù)據(jù)類型,且要保持一致。下面的寫法是錯誤的:


  1. //賦值號兩邊的數(shù)據(jù)類型不一致

  2. Point<float, float> *p = new Point<float, int>(10.6, 109);

  3. //賦值號右邊沒有指明數(shù)據(jù)類型

  4. Point<float, float> *p = new Point(10.6, 109);


綜合示例

【實例1】將上面的類定義和類實例化的代碼整合起來,構成一個完整的示例,如下所示:




運行結果: x=10, y=20 x=10, y=東經(jīng)180度 x=東經(jīng)180度, y=北緯210度

在定義類型參數(shù)時我們使用了 class,而不是 typename,這樣做的目的是讓讀者對兩種寫法都熟悉。

【實例2】用類模板實現(xiàn)可變長數(shù)組。



C++類模板入門教程的評論 (共 條)

分享到微博請遵守國家法律
大余县| 内丘县| 宿州市| 迭部县| 兴海县| 仁布县| 虹口区| 白水县| 南宫市| 友谊县| 馆陶县| 柳林县| 绍兴县| 屯门区| 固始县| 杨浦区| 建水县| 堆龙德庆县| 偏关县| 乌拉特前旗| 黔江区| 来宾市| 兴安盟| 土默特右旗| 五指山市| 丽水市| 镇远县| 岳池县| 钟祥市| 张家川| 南靖县| 大竹县| 吉安市| 杨浦区| 安达市| 祁东县| 呼图壁县| 怀宁县| 商城县| 嘉禾县| 卫辉市|