1-模板
1-13类模板成员函数类外实现
1构造函数
template<class T>//必须带
类名<T>::类名(参数){…};
2成员函数
template<class T>//必须带
函数类型 类名<T>::函数名(参数){…};
1-14类模板的分文件编写
类模板中的成员函数被调用时才会创建,你的类模板头文件不会去找函数声明对应的函数体(.cpp文件中)。正常函数此时已经链接到了自己的函数体,之后就可以正常使用,最后类模板的函数声明在调用阶段.h文件找不到自己的函数体。故主体.cpp文件报错。
解决办法:把类模板主体和成员函数主体写在一起,以.hpp形式存储。
1-15类模板中全局函数的类内类外实现(友元)
类内:friend void f1(){…};
类外:如果全局函数是在类外实现,需要让编译器提前知道这个函数的存在,故函数体需要放在文件头,而由于函数体中有person类参数,故还需在最前创建person类声明。
template<class T>;
class person;
template<class T>;
void print(person<T>&p){…};
………;
(类中)friend void print<> (person<T>&p) {}; //<>里什么都不填,仅表示这是一个函数模板