目录
2)结构体中有结构体,类中有类和函数,所以类模板中也有类模板和函数模板;3)类模板和函数模板都在类中定义和声明;模板头部标签可以相同名字,但是不是同一个;在类内和函数体内的参数类型就与名字的类型一致;
代码
#include<iostream>
using namespace std;
template<class T1,class T2>
class AA//AA是类模板,是类的通用描述,不存在叫AA的类
{
public:
T1 m_x;
T2 m_y;
AA(const T1 x,const T2 y):m_x(x),m_y(y){}
void show(){cout<<"调用AA:show();m_x="<<m_x<<"m_y="<<m_y<<endl;}///普通成员函数
template<class T>
class BB
{
public:
T m_a;
T1 m_b;//用模板AA的模板参数创建对象
BB(){}
void show(){cout<<"调用BB:show();m_a="<<m_a<<",m_b="<<m_b<<endl;}
};
BB<string>m_bb;//用BB类模板创建对象bb,是类AA的一个成员
//是模板类AA的成员函数,不过是一个函数模板
template<typename T>//该通用参数和上面的T没有关系
void show(T tt) //类模板AA的重载函数
{
cout<<"tt="<<tt<<endl;
cout<<"调用函数模板的实例化:show()m_x="<<m_x<<"m_x="<<m_y<<endl;//是类模板AA的成员函数,所以可以访问类模板AA的成员变量
m_bb.show();
}
};
int main()
{
//是类名AA<int,string>
AA<int,string>a1(88,"我是一只小猫咪");
a1.show();
a1.m_bb.m_a="我是一只喵";
a1.m_bb.m_b=66;
a1.m_bb.show();
a1.show("真的吗");
return 0;
}
//在实际开发中类模板中有类模板和函数模板的情况很常见