模板 類模板

2021-09-29 14:52:44 字數 3833 閱讀 5391

1.類模板和函式模板的區別

1.類模板沒有自動型別推導的使用方式

2.類模板在模板引數列表中可以有預設引數

#include

"pch.h"

#include

#include

using

namespace std;

//類模板

template

<

class

nametype

,class

agetype

=int

>

//agetype=int為預設引數,z則下面可以不寫型別

class

person

nametype m_name;

agetype m_age;};

void

test()

void

test02()

intmain()

2.類模板中成員函式和普通類中成員函式時機是有區別的:

1.普通類中的成員函式一開始就可以建立

2.類模板中的成員函式在呼叫時才建立

#include

"pch.h"

#include

#include

using

namespace std;

class

person1};

///class

person2};

template

<

class

t>

class

myclass

void

func2()

};void

test()

intmain()

3。.類模板例項化出的物件,像函式傳參的方式

一共有三種傳入方式:

1.指定傳入的型別:直接顯示物件的資料型別 (常用)

2.引數模板化:將對相中的引數變為模板進行傳遞

3.整個類模板化:將這個物件型別模板化進行傳遞

#include

"pch.h"

#include

#include

using

namespace std;

template

<

classt1,

class

t2>

class

person

void

showperson()

t1 m_name;

t2 m_age;};

//指定傳入的型別:直接顯示物件的資料型別

void

printperson1

(personint>

&p)void

test01()

//2.引數模板化:將對相中的引數變為模板進行傳遞

template

<

classt1,

class

t2>

void

printperson2

(person

&p)void

test02()

//3.整個類模板化

template

<

class

t>

void

printperson2

(t &p)

void

test02()

intmain()

4.當類模板碰到繼承時,需要注意以下幾點:

1.當子類繼承的父類是乙個類模板時,子類在宣告的時候,要指定出父類中t的型別

2.如果不指定,編譯器無法給子類分配記憶體

3.如果想靈活指定出父類中t的型別,子類也需變為類模板

#include

"pch.h"

#include

#include

using

namespace std;

template

<

class

t>

class

base

;//class son :public base //錯誤的,因為必須要知道父類中t的型別

class

son:

public base<

int>

;int

main()

5.類模板成員函式類外實現

#include

"pch.h"

#include

#include

using

namespace std;

template

<

classt1,

class

t2>

class

person

*/void

showperson()

; t1 m_name;

t2 m_age;};

//建構函式類外實現,但是要在類內先宣告

template

<

classt1,

class

t2>

person

::person

(t1 name,t2 age)

//成員函式類外實現

template

<

classt1,

class

t2>

void person

::showperson()

intmain()

6.類模板分檔案編寫

問題:類模板中成員函式建立時機是在呼叫階段,導致分檔案編寫時連線不到

解決:1.直接包含.cpp原始檔

2.將生命和實現寫到同乙個檔案,並更改字尾名為.hpp,hpp是約定的名稱,並不是強制

7.類模板與友元

全域性函式類內實現-直接在類內宣告友元即可

全域性函式類外實現-需要提前讓編譯器知道全域性函式的存在

#include

"pch.h"

#include

#include

using

namespace std;

//通過全域性函式,列印person資訊

template

<

classt1,

class

t2>

class

person

//類外實現,加乙個空模板的引數列表

friend

void printperson2<

>

(person p)

public

:person

(t1 name,t2 age)

private

: t1 m_name;

t2 m_age;};

//類外實現內容

template

<

classt1,

class

t2>

void

printperson

(person p)

intmain()

類模板 模板類

下面定義的是類模板,用int例項化t後成為模板類。例項化類模板的語法 類名 模板實參表 結合下例即 array就是將類模板array例項化為模板類的語法。類模板 include using namespace std templateclass array array t operator int ...

模板 類模板

類模板 建立乙個通用類,將其資料成員,成員函式的返回型別和形參型別不具體指定,用乙個虛擬的型別來代表,系統會根據實參的型別來定義模板中虛擬型別從而實現不同類的功能。類模板的格式 用類模板定義物件時 類模板名 實際型別名 物件名 實參列表 成員函式定義在類模板體外定義要求 需要在成員函式定義之前進行模...

類模板和模板類

c 提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。函式模板的一般說明形式如下 template 模板形參表 返回值型別 函式名 模板函式形參表 其中,模板形參表 可以包含基本資料型別...