#include总结:#include using namespace std; template class Demo { public: Demo(T data = 0); //构造函数 Demo operator+(const Demo& other); //对象的data相加,返回一个对象 T getData() const; //获取data private: T data; }; //在类的实现文件里,需要声名类模板 template //类的作用域前添加 Demo ::Demo(T data) { this->data = data; } template //类的返回值,类的作用域,类的形参都需要添加模板声明 Demo Demo ::operator+(const Demo & other) { Demo tmp; tmp.data = (this->data + other.data); return tmp; } template T Demo ::getData() const { return this->data; } int main(void) { Demo d1(100), d2(200); Demo tmp = d1 + d2; cout << tmp.getData() << endl; system("pause"); return 0; }
在同一个cpp 文件中把模板类的成员函数放到类的外部,需要注意以下几点
函数前声明 template <类型形式参数表>类的成员函数前的类限定域说明必须要带上虚拟参数列表返回的变量是模板类的对象时必须带上虚拟参数列表成员函数参数中出现模板类的对象时必须带上虚拟参数列表成员函数内部没有限定
需要在类模板时 包含#include “Demo.cpp” //需要包含类的实现.cpp文件
Demo.h
#pragma once templateclass Demo{ public: Demo(T data = 0); //构造函数 Demo operator+(const Demo& other); //对象的data相加,返回一个对象 T getData() const; //获取data private: T data; };
Demo.cpp
#include "Demo.h" //在类的实现文件里,需要声名类模板 template//类的作用域前添加 Demo ::Demo(T data){ this->data = data; } template //类的返回值,类的作用域,类的形参都需要添加模板声明 Demo Demo ::operator+(const Demo & other){ Demo tmp; tmp.data = (this->data + other.data); return tmp; } template T Demo ::getData() const{ return this->data; }
main.cpp
#include注意:#include #include "Demo.cpp" //需要包含类的实现.cpp文件 #include "Demo.h" using namespace std; int main(void) { Demo d1(100), d2(200); Demo tmp = d1 + d2; cout << tmp.getData() << endl; system("pause"); return 0; }
当类模板的声明(.h文件)和实现(.cpp 或.hpp文件)完全分离,因为类模板的特殊实现,我们应在使用类模板时使用#include 包含 实现部分的.cpp 或.hpp文件。



