原文:
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 函式模...