注意:
- 当子类继承了父类的类模板的时候,子类在声明的时候,要指定出父类的类型。
- 如果不指定,编译器无法给子类分配内存
- 如果想灵活的指出父类的T类型,子类也需要变成类模板
#include二、类模板成员函数类外实现using namespace std; template class Base { public: T m; }; //class Son:public Base//缺少类模板base的参数列表 //class Son:public Base //确定父类的模板类型 //{ // //}; template class Son :public Base { public: Son() { cout << "T1的类型为:" << typeid(T1).name() << endl; cout << "T2的类型为:" << typeid(T2).name() << endl; } T1 obj; }; void test() { Son s1; } int main() { test(); system("pause"); return 0; }
-
构造函数
-
成员函数
#include三、类模板分文件编写using namespace std; template class Person { public: Person(nameType name, ageType age); void showPerson(); nameType name; ageType age; }; template //构造函数 Person ::Person(nameType name, ageType age) { this->name = name; this->age = age; } //成员函数 template void Person< nameType, ageType>::showPerson() { cout << "姓名:" << this->name << " 年龄:" << this->age << endl; } void test() { Person p("Tom", 19); p.showPerson(); } int main() { test(); system("pause"); return 0; }
不能把声明和实现分别写在.h 和.cpp 文件中,会出现一个无法解析的外部命令。需要把声明和实现写在一个文件中,.hpp
#pragma once #include四、类模板和友元 1、类内实现using namespace std; template class Person { public: Person(nameType name, ageType age); void showPerson(); nameType name; ageType age; }; template //构造函数 Person ::Person(nameType name, ageType age) { this->name = name; this->age = age; } //成员函数 template void Person< nameType, ageType>::showPerson() { cout << "姓名:" << this->name << " 年龄:" << this->age << endl; }
#include2、类外实现using namespace std; #include template class Person { friend void showPerson(Person p)//全局函数做友元类内实现 { cout << "姓名:" << p.name << " 年龄:" << p.age << endl; } public: Person(nameType name,ageType age) { this->name = name; this->age = age; } private: nameType name; ageType age; }; void test01() { Person p("张三", 19); showPerson(p); } int main() { test01(); system("pause"); return 0; }
#includeusing namespace std; #include template class Person; template void showPerson(Person p) { cout << "类外实现---姓名:" << p.name << " 年龄:" << p.age << endl; } template class Person { //添加一个空模板参数列表,告诉编译器这是一个模板的函数声明 friend void showPerson<>(Person p);//全局函数做友元类内实现 public: Person(nameType name, ageType age) { this->name = name; this->age = age; } private: nameType name; ageType age; }; void test01() { Person p("张三", 19); showPerson(p); } int main() { test01(); system("pause"); return 0; }



