C 學習筆記之 模板

2022-05-06 11:57:10 字數 3100 閱讀 4104

目錄類模板

模板是泛型程式設計的基礎,泛型程式設計即以一種獨立於任何特定型別的方式編寫**,即不具體制定資料型別

模板是建立泛型類或函式的藍圖或公式

#include #include using namespace std;

// 函式模板實現通用資料型別交換

template// t屬於通用資料型別

void myswap(t &a,t &b)

// 使用函式模板

void test01()

int main()

a = 0,b = 1

a = 1,b = 0

a = 0,b = 1

a = 1,b = 0

普通函式可以發生隱式型別轉化

如果普通函式和函式模板(同名)都可以匹配,優先匹配普通函式

如果要強制呼叫函式模板,則要加空模板引數列表myswap<>(a,b)

函式模板也可以產生函式過載

如果函式模板可以產生更好的匹配,那麼優先匹配函式模板

#include using namespace std;

class person

};// 模板並不真正通用

// 對於特殊資料型別,可以具體化實現

templatebool mycompare(t &a, t &b)

// 利用具體化實現,解決特殊資料型別

// 語法:template<> 函式名 + 具體實現

template<> bool mycompare(person &a, person &b)

int main()

0
#include #include using namespace std;

// 模板中也可以指定預設引數

templateclass person

};int main()

#includeusing namespace std;

class person1

};class person2

};//類模板中成員函式並不是一開始建立,而是在替換t後,才去生成

templateclass testclass

void func2()

t obj;

};void test01()

int main()

#includeusing namespace std;

#include //模板中 也可以使用預設引數

templateclass person

void showperson()

t1 m_name;

t2 m_age;

};//1、指定傳入型別

void dowork(person &p)

void test01()

//2、將引數模板化

templatevoid dowork2(person &p)

void test02()

//3、將類模板化

templatevoid dowork3(t &p)

void test03()

int main()

t = 6personinst7__cxx1112basic_stringicst11char_traitsicesaiceeeie

姓名: bill 年齡: 100

#includeusing namespace std;

templateclass base

;//子類在繼承時,必須確定出父類的t的資料型別,否則無法給t分配記憶體空間

class son :public base;

templateclass base2

;templateclass son2 :public base2

t1 m_b;

};void test01()

int main()

t1的型別為: i

t2的型別為: d

#includeusing namespace std;

#include templateclass person

void showperson();

//t1 m_name;

t2 m_age;

};templateperson::person(t1 name, t2 age)

templatevoid person::showperson()

void test01()

int main()

姓名: aaa 年齡: 10
類內實現
#includeusing namespace std;

#include templateclass person

public:

person(t1 name, t2 age)

private:

t1 m_name;

t2 m_age;

};void test01()

int main()

類外實現
#includeusing namespace std;

#include //先讓編譯器看到person類宣告

templateclass person;

//先讓編譯器看到函式模板 printperson的存在

templatevoid printperson(person& p);

templatevoid printperson2(person& p)

templateclass person

private:

t1 m_name;

t2 m_age;

};templatevoid printperson(person& p)

void test01()

int main()

c 學習筆記之成員模板

任意類 模板或者是飛模板 可以擁有類模板或函式模板的成員,這種成員成為成員模板,成員模板不能為虛。成員模板的乙個例子是標準容器的assign成員,接受兩個迭代器的assign版本使用模板形參表示其迭代器形參的型別。另乙個例子就是接受兩個迭代器的容器建構函式。1 定義成員模板 模板成員宣告看起來像任意...

c 學習筆記之成員模板

任意類 模板或者是飛模板 可以擁有類模板或函式模板的成員,這種成員成為成員模板,成員模板不能為虛。成員模板的乙個例子是標準容器的assign成員,接受兩個迭代器的assign版本使用模板形參表示其迭代器形參的型別。另乙個例子就是接受兩個迭代器的容器建構函式。1 定義成員模板 模板成員宣告看起來像任意...

C 之模板 模板的學習 學習模板

c 之模板 模板學習 學習模板 模板就是建立通用的模具,大大提高復用性 函式模板 c 提供兩種模板機制函式模板和類模板 函式模板語法 函式模板作用 建立乙個通用函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表 語法 template typename t 函式宣告或定義解釋 t...