c++ template 类模板

来源:互联网 发布:云烟淘宝客助手v7.5 编辑:程序博客网 时间:2024/06/06 10:06



网上学习来的例子:

#include <string.h>   #include <iostream> using namespace std; template <typename T> class Stack;template <typename T> class StackItem{public: T info; StackItem *next; StackItem(T x) {  info = x;  next = NULL; } friend class Stack<T>;};template <typename T> class Stack{ StackItem<T> * top;public: Stack() {  top = NULL; } void push(T x) {  StackItem<T> *p = new StackItem<T>(x);  p->next = top;  top = p; } T pop() {  if(top == NULL)  {   throw 1;  }  StackItem<T> * p = top;  top = top->next;  T x = p->info;  delete p;  return x; }};int main(){ Stack<double> a; a.push(1.3); a.push(9); cout << a.pop() << endl; cout << a.pop() << endl; return 0;}

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o mainpateo@pateo-B86N53X:~/work/study$ ./main91.3pateo@pateo-B86N53X:~/work/study$ 

#include <string.h>   #include <iostream> using namespace std; template <class T>class Base{public :    T a ;Base(T b){a = b ;    }   T getA(){ return a ;} //类内定义 void setA(T c);};template <class T>   //模板在类外的定义 void  Base<T>::setA(T c){a = c ;}int main(void){Base <int>b(4);cout<<b.getA()<<endl; Base <double> bc(4);bc.setA(4.3);cout<<bc.getA()<<endl; return 0 ;    }

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o mainpateo@pateo-B86N53X:~/work/study$ ./main44.3pateo@pateo-B86N53X:~/work/study$ 



#include <string.h>   #include <iostream> using namespace std; template <class T>class Base{public :    T a ;Base(T b){a = b ;    }   T getA(){ return a ;} //类内定义 void setA(T c);        static int count(){return ctr;}private :        static int ctr;};template <class T> int Base<T>::ctr = 5;template <class T>   //模板在类外的定义 void  Base<T>::setA(T c){a = c ;}int main(void){Base <int>b(4);cout<<b.getA()<<endl; Base <double> bc(4);bc.setA(4.3);cout<<bc.getA()<<endl; Base <int>c(6);        cout<<c.count()<<endl;return 0 ;    }

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o mainpateo@pateo-B86N53X:~/work/study$ ./main44.35pateo@pateo-B86N53X:~/work/study$