通常,当我们调用一个函数时,编译器只需要掌握函数的声明。 类似的,当我们使用一个类类型的对象时,类定义必须是可用的,但成员函数的定义不必已经出现。 因此我们将类定义和函数声明放在头文件中,而普通函数和类的成员函数的定义放在源文件中。
模板则不同: 为了生成一个实例化版本,编译器需要掌握函数模板或类模板成员函数的定义。因此,与非模板代码不同,模板的头文件通常即包括声明也包括定义。
template<class T>LinkList<T>::LinkList() {...}template<class T>LinkList<T>::LinkList(T a[], int n) {...}//类模板实例化:int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };LinkList<int> linkList1; //无参构造LinkList<int> linkList2(a, 10); //有参构造默认情况下,对于一个实例化了的类模板,其成员只有在使用时才被实例化。
在类模板外使用类模板名 LinkList<T>::LinkList(T a[], int n) {...}
新闻热点
疑难解答