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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章