C++类模板(一)
C++ 除了支持函數模板,還支持類模板(Class Template)。函數模板中定義的類型參數可以用在函數聲明和函數定義中,類模板中定義的類型參數可以用在類聲明和類實現中。類模板的目的同樣是將數據的類型參數化。
聲明類模板的語法為:
template<typename 類型參數1 , typename 類型參數2 , …> class 類名{//TODO: };類模板和函數模板都是以 template 開頭(當然也可以使用 class,目前來講它們沒有任何區別),后跟類型參數;類型參數不能為空,多個類型參數用逗號隔開。
一但聲明了類模板,就可以將類型參數用于類的成員函數和成員變量了。換句話說,原來使用 int、float、char 等內置類型的地方,都可以用類型參數來代替。
假如我們現在要定義一個類來表示坐標,要求坐標的數據類型可以是整數、小數和字符串,例如:
- x = 10、y = 10
- x = 12.88、y = 129.65
- x = “東經180度”、y = “北緯210度”
這個時候就可以使用類模板,請看下面的代碼
#include <iostream> using namespace std;template <class T1,typename T2> class Point{public:Point(T1 x,T2 y):m_x(x),m_y(y){};T1 getX() const;//獲取x坐標void setX(T1 x);//設置x坐標T2 getY() const;//獲取y坐標void setY(T2 y); //設置y坐標private:T1 m_x; //x坐標T2 m_y; //y坐標 };template <class T1,class T2> //模板頭//函數頭T1 Point<T1,T2>::getX() const {return m_x; }template <class T1,class T2> //模板頭//函數頭 void Point<T1,T2>::setX(T1 x) {m_x=x; }template <class T1,class T2> //模板頭 //函數頭 T2 Point<T1,T2>::getY() const {return m_y; }template <class T1,class T2> //模板頭//函數頭 void Point<T1,T2>::setY(T2 y) {m_y=y; }int main(){Point <int,int > p1(10,20);cout <<"x="<<p1.getX()<<", y="<<p1.getY()<<endl;Point <int,char *> p2(10,"東經180度");cout <<"x="<<p2.getX()<<", y="<<p2.getY()<<endl;Point <char *,char *> p3("東經180度","北緯38度");cout <<"x="<<p3.getX()<<", y="<<p3.getY()<<endl;return 0;}在定義類型參數時我們使用了 class,而不是 typename,這樣做的目的是讓讀者對兩種寫法都熟悉。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: C ++ 函数模板求三个数的最大和
- 下一篇: C++类模板(二)用类模板实现可变长数组