1、继承的模板
#include<iostream>
using namespace std;
template<typename T=int,typename Y=char>
class stu
{
public:
T a;
stu(T t)
{
a = t;
}
stu()
{
a = 16;
}
void fun()
{
cout << "stu1\n";
}
};
template<typename X,typename Z>
class stu1 :public stu<X,Z>//使用类模板需要模板参数列表。
{
public:
/*stu1():stu(12)
{
}*/
stu1():stu<X,Z>()
{
}
};
int main()
{
stu<int ,char> db;
db.fun();
system("pause");
return 0;
}
2、多态的模板
#include<iostream>
using namespace std;
template<typename T = int, typename Y = char>
class stu
{
public:
virtual void fun()
{
cout << "fun\n";
}
};
//template<typename X, typename Z>
template<typename X, typename Z,typename w>
class stu1 :public stu<X, Z>//使用类模板需要模板参数列表。
{
public:
virtual void fun()
{
cout << "fun1\n";
}
};
int main()
{
//stu<int,char>* db = new stu1<int ,char>;
stu<int,char>* db = new stu1<int ,char,int>;//类型从右到左一一对应。
db->fun();
system("pause");
return 0;
}
3、模板类型是类的模板
#include<iostream>
using namespace std;
template<typename X>
class NBA
{
public:
int a;
};
template<typename T = int, typename Y = char>
class stu
{
public:
stu(NBA<char>& a)
{
}
void fun()
{
cout << "fun\n";
}
};
//template<typename X, typename Z>
template<typename X, typename Z, typename w>
class stu1 :public stu<X, Z>//使用类模板需要模板参数列表。
{
public:
void fun()
{
cout << "fun1\n";
}
};
int main()
{
NBA<char> db1;
stu<int, NBA<char>> db(db1);
system("pause");
return 0;
}