类模板
类模板作用:建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代替。
类模板语法
template<typename T>
类
typename
也可以写为class
,二者没有任何区别。
练习代码如下:
#include <iostream>
#include <string>
using namespace std;
template<typename nameType,typename ageType>
class Person
{
public:
Person(nameType name, ageType age)
{
m_name = name;
m_age = age;
}
void ShowPerson()
{
cout << "name:" << m_name << " " << "age:" << m_age << endl;
}
nameType m_name;
ageType m_age;
};
void test01()
{
Person<string, int> p1("孙猴子", 999);
p1.ShowPerson();
}
int main()
{
test01();
system("pause");
return 0;
}
类模板与函数模板的区别
类模板和函数模板的区别主要有两点:
- 类模板没有自动类型推导的使用方式
- 类模板在模板参数列表中可以有默认参数
练习代码如下:
#include <iostream>
#include <string>
using namespace std;
//类模板和函数模板的区别
template <class nametype, class agetype = int>
class Person
{
public:
Person(nametype name, agetype age)
{
m_name = name;
m_age = age;
}
void ShowPerson()
{
cout << "name:" << m_name << "age:" << m_age << endl;
}
nametype m_name;
agetype m_age;
};
//1、类模板没有自动类型推导的使用方式
void test01()
{
//Person p("孙猴子", 1000);//error 无法自动推导
Person<string, int> p("孙猴子", 1000);//true 只能用显示指定类型
p.ShowPerson();
}
//2、类模板在模板参数列表中可以有默认参数
void test02()
{
Person<string> p("猪八戒", 999);
p.ShowPerson();
}
int main()
{
//test01();
test02();
system("pause");
return 0;
}
类模板中成员函数创建时机
类模板中成员函数和普通类中成员函数创建时机是有区别的:
- 普通类中的成员函数一开始就可以创建
- 类模板中的成员函数在调用时才创建
练习代码如下:
#include <iostream>
#include <string>
using namespace std;
//类模板中成员函数的创建时机
//类模板中成员函数在调用时才创建
class Person1
{
public:
void showPerson1()
{
cout << "showPerson1" << endl;
}
};
class Person2
{
public:
void showPerson2()
{
cout << "showPerson2" << endl;
}
};
template <class T>
class myClass
{
public:
T obj;
//类模板中的成员函数
void func1()
{
obj.showPerson1();
}
void func2()
{
obj.showPerson2();
}
};
void test01()
{
my