C 模板 函式模板 類模板 模板與繼承

2021-08-29 18:41:56 字數 4369 閱讀 2976

原文: 

c++模板:描述    

c++提供一種模板的機制來減少**重複。比如:對於同一樣函式使用不同的資料型別,int,double,char等。c++模板屬於「元程式設計」的範疇。

c++ 模板函式

1.支援不同資料型別的函式過載:

#include

using namespace std;

int square (int x)

;float square (float x)

;double square (double x)

;main()

2.支援所有資料型別的函式模板

#include

using namespace std;

template

inline t square(t x)

;main()

註明:模板的關鍵字可以用class或者typename.

template

template

兩者表達的意思是一樣的,但是我更喜歡使用後者。

可以採用兩種方式使用模板函式square(value) or square(value).在模板函式的定義中,t代表資料型別。模板的宣告和定義必須在同乙個檔案中,如標頭檔案中。c語言的巨集定義也可以實現函式模板的功能,#define square(x) (x * x) 

但是巨集沒有型別檢查,函式模板有型別檢查。

c++ 模板特例化

下面的例子字串型別需要特殊處理,採用模板的特例化

#include

using namespace std;

template

inline t square(t x)

;// 模板特殊化

template <>

string square(string ss)

;main()

註明:模板特例化用於當乙個資料型別需要進行不同的處理和實現的情況。

c++ 模板無型別引數

#include

using namespace std;

template

void loopit(t x)

c++ 模板預設型別引數以及無型別引數

#include

using namespace std;

template

t multit(t x)

註明:multit<>沒有指定引數型別,預設為float;

c++ 類模板

類模板定義:template class mytemplateclass ;

類模板特例化:template <> class mytemplateclass ;

file: matrix2x2.hpp

#ifndef matrix_2x2_hpp__

#define matrix_2x2_hpp__

using namespace std;

/**m(11)  m(12)

m(21)  m(22)

*/template

class matrix2x2

;template

matrix2x2::matrix2x2(t _m11, t _m12, t _m21, t _m22)

template

matrix2x2::matrix2x2(t _m)

template

matrix2x2::matrix2x2()

template

matrix2x2::add(matrix2x2 _x)

template

matrix2x2::multiply(matrix2x2 _x)

template

matrix2x2::print()

#endif

testmatrix2x2.cpp

#include

#include "matrix2x2.hpp"

using namespace std;

int main(int argc, char* argv)

c++ 普通類和類模板的靜態成員變數

普通類的靜態成員函式:

#include

using namespace std;

class xyz

;void xyz::putpri()

// 靜態成員變數初始化:

int xyz::ipub = 1;

int xyz::ipri = 1;

main()

類模板的靜態成員:

#include

using namespace std;

template

class xyz

;template

void xyz::putpri()

// 靜態成員初始化:

template t xyz::ipub = 1;

template t xyz::ipri = 1.2;

main()

c++ 模板的模板引數

#include

using namespace std;

template typename u>

class xyz

;c++ 類模板和繼承

color.hpp (無模板的基類)

#ifndef color_hpp__

#define color_hpp__

#include

enum ecolor ;

class color

;std::string getstrcolor();

protected:

ecolor mcolor;

};color::color(ecolor _color)

void color::setcolor(ecolor _color)

std::string color::getstrcolor()

}#endif

file: circle.hpp (模板基類)

#ifndef circle_hpp__

#define circle_hpp__

#include

#include

#include "color.hpp"

template

class circle : public color

;template

circle::circle(t _x, t _y, t _radius, ecolor _color)

: color(_color)

template

circle::circle(t _x, t _y, t _radius)

: color(none)

template

circle::circle(t _radius)

: color(none)

template

t circle::area()

template

t circle::circumference()

#endif

file: testcircle.cpp

#include

#include "circle.hpp"

using namespace std;

int main(int argc, char* argv)

乙個模板類繼承另外乙個模板類:

file: sphere.hpp (派生類)

#ifndef sphere_hpp__

#define sphere_hpp__

#include "circle.hpp"

template

class sphere : public circle

;template

sphere::sphere(t _x, t _y, t _z, t _radius, ecolor _color)

: circle::circle (_x, _y, _radius, _color)

template

sphere::sphere(t _radius)

: circle::circle (_radius)

template

sphere::sphere()

template

t sphere::su***cearea()

template

t sphere::volume()

#endif

註明:用this來顯示類的依賴

file: testsphere.cpp

#include

#include "sphere.hpp"

using namespace std;

int main(int argc, char* argv)

C 模板 函式模板 類模板 模板與繼承

c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view plain copy include using namespace std int square int...

C 模板 函式模板 類模板 模板與繼承

2013 09 13 23 09 28054人閱讀收藏 舉報 c c stl 泛型程式設計 64 目錄 c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view p...

模板 函式模板與類模板

模板 template 是乙個將資料型別引數化的工具。模板分為函式模板和類模板兩種。在定義模板的時候不說明某些函式引數或者資料成員的型別,而將它們的資料型別作為模板引數。在使用模板時根據實參的資料型別確定模板引數即資料型別,從而得到模板的乙個例項。函式模板 function template 函式模...