類模板實例化出的對象,向函數傳參的方式
一共有三種傳入方式:
- 指定傳入的類型 — 直接顯示對象的數據類型
- 參數模板化 — 將對象中的參數變為模板進行傳遞
- 整個類模板化 — 將這個對象類型 模板化進行傳遞
總結:比較廣泛使用的是第一種,指定類型傳入
#include<iostream>
using namespace std;//類模板
template<class Nametype,class agetype = int>
class Person
{
public:Person(Nametype name, agetype age){this->mname = name;this->mage = age;}Nametype mname;agetype mage;void showPerson(){cout << "name: " << mname << "age: " << mage << endl;}
};//1 指定傳入的類型void printPerson1(Person<string, int>& p)
{p.showPerson();
}void test01()
{Person<string, int>p("黃剛", 21);printPerson1(p);
}//2.參數模板化template<class T1,class T2>
void printPerson2(Person<T1, T2>& p)
{p.showPerson();cout << "T1的類型為: "<<typeid(T1).name() << endl;//T1的類型為: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >cout << "T2的類型為: " << typeid(T2).name() << endl;//T2的類型為: int}
void test02()
{Person<string, int>p("黃剛", 100);printPerson2(p);
}//3.整個類模板化template<class T3>
void printPerson3(T3& p)
{cout << "T3的類型為: "<<typeid(T3).name() << endl;//T3的類型為: class Person<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int>p.showPerson();
}
void test03()
{Person<string, int>p("黃剛", 100);printPerson3(p);
}int main()
{test01();test02();test03();return 0;
}