1.类模板
类模板和函数模板的区别
类模板不可以使用自动类型推导,只能使用显示指定类型的方式
在类模板中可以有默认参数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<string>
template<class NAMETYPE, class AGETYPE>
class Person
{
public:
Person(NAMETYPE name, AGETYPE age)
{
this->m_Name = name;
this->m_Age = age;
}
void showPerson()
{
cout << "姓名:" << this->m_Name << endl;
cout << "年龄:" << this->m_Age << endl;
}
NAMETYPE m_Name;
AGETYPE m_Age;
};
void test01()
{
//类模板和函数模板的区别
//1.类模板不可以使用自动类型推导,只能使用显示指定类型的方式
//2.在类模板中可以有默认参数
//Person p1("孙悟空", 100);
//显示指定类型
Person<string, int> p1("孙悟空", 100);
p1.showPerson();
}
int main()
{
test01();
system("pause");
return EXIT_SUCCESS;
}
2.类模板中成员函数的创建时机
类模板中的成员函数 并不是一开始创建的,而实在运行阶段确定出T的数据类型才去创建
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person1
{
public:
void showPerson1()
{
cout << "person1的show调用" << endl;
}
};
class Person2
{
public:
void showPerson2()
{
cout << "person2的show调用" << endl;
}
};
//类模板中的成员函数 并不是一开始创建的,而实在运行阶段确定出T的数据类型才去创建
template<class T>
class MyClass
{
public:
void func1()
{
obj.showPerson1();
}
void func2()
{
obj.showPerson2();
}
T obj;
};
void test01()
{
MyClass<Person1>p1;
p1.func1();
//p1.func2();
}
int main()
{
test01();
system("pause");
return EXIT_SUCCESS;
}
3.类模板做函数参数
指定传入类型(最常用)
参数模板化
整个类模板化
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<string>
template<class T1, class T2>
class Person
{
public:
Person(T1 name, T2 age)
{
this->m_Name = name;
this->m_Age = age;
}
void showPerson()
{
cout << "姓名:" << this->m_Name << endl;
cout << "年龄:" << this->m_Age << endl;
}
T1 m_Name;
T2 m_Age;
};
//1.指定传入的类型(最常用)
void doWork(Person<string, int>& p)
{
p.showPerson();
}
void test01()
{
Person<string, int>p("疾风剑豪", 999);
doWork(p);
}
//2.参数模板化
template<class T1, class T2>
void doWork2(Person<T1, T2>& p)
{
p.showPerson();
}
void test02()
{
Person<string, int>p("封魔剑魂", 1000);
doWork2(p);
}
//3.整个类模板化
template<class T>
void doWork3(T& p)
{
p.showPerson();
}
void test03()
{
Person<string, int>p3("影流之主", 998);
doWork3(p3);
}
int main()
{
test01();
test02();
test03();
system("pause");
return EXIT_SUCCESS;
}