C++ 提高教程 -模板 类模板分文件编写

Posted 行码阁119

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 提高教程 -模板 类模板分文件编写相关的知识,希望对你有一定的参考价值。

 

第一种解决方式,直接包含源码

 类模板中的成员函数一开始不会创建的,当包含.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()和showPerson()两个函数,所以最后在链接阶段的时候,两个成员函数找不到,无法链接。如果直接去包含Cpp,相当于让编译器直接去看这段代码,包含.h文件。

# 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;
}

第二种解决方式,将我们的.h和.cpp内容写到一起,将后缀名改为.hpp文件

#pragma once
# 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;
};

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;
}

主函数

# include<iostream>
# include"Person.hpp"
using namespace std;

//类模板分文件编写问题及解决
//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;
//}

//类模板中的成员函数一开始不会创建的,当包含.h的时候,
void test01()
{
	Person<string, int>p("Terry",18);
	p.showPerson();
}

int main()
{
	test01();
	system("pause");
	return 0;
}

以上是关于C++ 提高教程 -模板 类模板分文件编写的主要内容,如果未能解决你的问题,请参考以下文章

SQL Prompt7.2下载及破解教程

C++编程基础: 14. 文件的读写

C++学习-函数的分文件编写

如何围绕 C++ 代码编写 C 包装器以公开类方法

C++视频教程201802C语言提高全72讲 视频教程+源代码

VIM 代码片段插件 ultisnips 使用教程