C++高级编程,类模版成员函数类外实现
·
#include <iostream>
#include <string>
//类模版成员函数类外实现
template<class T1,class T2>
class Person
{
//Person构造函数
public:
Person(T1 name,T2 age);
// {
// this->m_Name=name;
// this->m_Age=age;
// }
//Person的成员函数
void showPerson();
// {
// std::cout<<"Name: "<<this->m_Name<<std::endl;
// std::cout<<"Age: "<<this->m_Age<<std::endl;
// }
T1 m_Name;
T2 m_Age;
};
//构造函数的类外实现
//要加上一个作用域
//如果没有Person<T1,T2>::前缀,编译器会认为这是一个全局函数,并且编译器会认为这是一个普通函数的类外实现
template<class T1,class T2>
Person<T1,T2>::Person(T1 name,T2 age){
this->m_Name=name;
this->m_Age=age;
}
//成员函数的类外实现
template<class T1,class T2>
void Person<T1,T2>::showPerson(){
std::cout<<"Name: "<<this->m_Name<<std::endl;
std::cout<<"Age: "<<this->m_Age<<std::endl;
}
void test01()
{
//创建Person类的对象
Person<std::string,int> p("Tom",18);
//调用成员函数
p.showPerson();
}
int main()
{
test01();
return 0;
}
类模版分文件编写
问题:类模版中成员函数创建时机是在调用阶段,导致分文件编写时链接不到。
- 解决方式1:直接包含.cpp源文件
- 解决方法2:将声明和实现写在同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制。
main.cpp
#include <iostream>
using namespace std;
#include "person.h"
//类模版的分文件编写的问题以及解决
// template <class T1,class T2>
// class Person{
// public:
// Person(T1 name,T2 age);
// void showPerson();
// T1 m_Name;
// T2 m_Age;
// };
// template <class T1,class T2>
// Person<T1,T2>::Person(T1 name, T2 age)
// {
// this->m_Name = name;
// this->m_Age = age;
// }
// template<class T1,class T2>
// void Person<T1,T2>::showPerson()
// {
// cout << "姓名:" << this->m_Name << " 年龄:" << this->m_Age << endl;
// }
void test01()
{
Person<string,int> p("Jerry",28);
p.showPerson();
}
int main()
{
test01();
return 0;
}
person.h
#include <iostream>
using namespace std;
template <class T1,class T2>
class Person{
public:
Person(T1 name,T2 age);
void showPerson();
T1 m_Name;
T2 m_Age;
};
person.cpp
#include "person.h"
template <class T1,class T2>
Person<T1,T2>::Person(T1 name, T2 age)
{
this->m_Name = name;
this->m_Age = age;
}
template<class T1,class T2>
void Person<T1,T2>::showPerson()
{
cout << "姓名:" << this->m_Name << " 年龄:" << this->m_Age << endl;
}
template class Person<string,int>;
template class Person<string,int>;
更多推荐
所有评论(0)