1.类模板格式
head文件
template <typename T> // typename或者class都可以
class A
{
public:
A();
A(T data);
void Print();
protected:
string message;
};
/*以下三句话是必须加的,当前的编译器不支持模板类的定义和实现分离。
*或者将实现也写在head文件中,效果一样。
*或者在include头文件的地方,include其cpp文件*/
#ifdef _INLINE_
#include "A.cpp"
#endif
source文件
template <typename T>
A<T>::A(){}
template <typename T>
void A<T>::Print(){}
2.继承
template <typename T>
class B:public A<T> // 基类要指明类型参数,而不能仅仅用A
{
public:
B(T data);
void Say();
};
template <typename T>
B<T>::B(T data)
:A<T>::A(data) // 调用父类特定的构造函数时,必须用A<T>::明确指明属于哪个类的A
{}
template <typename T>
void B<T>::Say()
{
/* cout<<message<<endl;
*这样会报message undefined in this scope的错误,但是message明明
*在基类A中已经定义了。具体原因同模板类具体化的程序有关,有待探究。
*在这,只需用this指针即可指明,即可避免以上错误*/
cout<<this->message<<endl;
}
3.注意
1)模板类只是类的蓝图,它并不是一个类,所以在使用模板类的时候,需要为其提供类型参数才是一个具体的类类型。
待续。。。