一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)
模板类是类模板实例化后的一个产物。说个形象点的例子吧。我把类模板比作一个做饼干同的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做豆沙饼干,这些饼干的除了材料不一样外,其他的东西都是一样的了。
// 类模板;
template<class T>
class Base{
public:
explicit Base():m_t(0){}
explicit Base(T t):m_t(t){}
T getT() const { return m_t; }
Base<T> sum(const Base<T> &);
T& operator=(const Base<T> &); // this -
T m_t;
};
template<class T>
T& Base<T>::operator=(const Base<T> &t){
this->m_t = t.getT();
return *this;
}
template<class T>
Base<T> Base<T>::sum(const Base<T> &t){
this->m_t += t.getT();
return *this;
}
// 从类模板派生非模板类
class Deriveint:public Base<int> // 实例化特定类;
{
public:
explicit Deriveint(int c):Base(c){} ;
};
//从类模板派生类模板可以从类模板派生出新的类模板
template<class T>
class Derive:public Base<T>
{
public:
explicit Derive(T t):Base<T>(t){ } ;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Base<int> base(12);
qDebug() << base.getT() << endl;
Derive<double> cd(3.43);
qDebug() << cd.getT() ;
Derive<double> c = cd ;
qDebug() << c.getT() ;
c.sum(cd);
qDebug() << c.getT() ;
return a.exec();
}