c++从入门到精通——类模板做函数的参数

类模板做函数的参数

指定传入类型

#include <iostream>
using namespace std;

//类模板
template <class NameType, class AgeType = int> //类模板可以有默认类型
class Person
{
public:
	Person(NameType name, AgeType age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	void showPerson()
	{
		cout << "姓名:" << this->m_Name << " 年龄: " << this->m_Age <<"岁"<< endl;
	}

	NameType m_Name;
	AgeType m_Age;
};

//1  指定传入类型
void doWork( Person<string ,int> & p ) 
{
	p.showPerson();
}

void test01()
{
	Person <string, int> p("小李子",10);
	doWork(p);
}

int main()
{
    test01();
    return 0;
}

运行,得

姓名:小李子 年龄: 10岁

参数模板化

#include <iostream>
using namespace std;


//类模板
template <class NameType, class AgeType = int> //类模板可以有默认类型
class Person
{
public:
	Person(NameType name, AgeType age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	void showPerson()
	{
		cout << "姓名:" << this->m_Name << " 年龄: " << this->m_Age << endl;
	}

	NameType m_Name;
	AgeType m_Age;
};

//2 参数模板化
template<class T1 ,class T2>
void doWork2(Person<T1, T2> & p)
{
	//如何查看类型
	cout << typeid(T1).name() << endl;
	cout << typeid(T2).name() << endl;
	p.showPerson();
}
void test02()
{
	Person <string, int> p("小李子", 18);

	doWork2(p);
}

int main()
{
    test02();
    return 0;
}

运行

class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
int
姓名:小李子 年龄: 46

整体模板化

//3 整体模板化
template<class T>
void doWork3(T&p)
{
	cout << typeid(T).name() << endl;
	p.showPerson();
}

void test03()
{
	Person <string, int> p("劣人", 18);

	doWork3(p);
}

运行

class Person<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int>
姓名:劣人 年龄: 18

总结——类模板做函数的参数

//1  ------------------------指定传入类型
void doWork( Person<string ,int> & p ) 

//1 使用
Person <string, int> p("小李子",10);

//2 ------------------------参数模板化
template<class T1 ,class T2> void doWork2(Person<T1, T2> & p)


//2 使用
Person <string, int> p("小李子", 18);


//3 ------------------------整体模板化
template<class T> void doWork3(T&p)

//3 使用
Person <string, int> p("小李子", 18);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章