类模板分文件编写
1.C++函数模板案例2.普通函数与函数模板调用规则3.普通函数与函数模板调用规则24.模板的局限性5.类模板6.类模板与函数模板的区别7.类模板中成员函数创建时机8.类模板对象做函数参数9.类模板与继承10.类模板成员函数类外实现
11.类模板分文件编写
12.类模板与友元13.类模板案例14.STL初识15.容器算法迭代器初识16.Vector中存放自定义数据类型17.Vector容器镶套容器18.STL---常用容器19.string赋值操作20.string字符串拼接21.string查找和替换22.string字符串比较/字符存取/插入和删除/子串获取23.vector容器/构造函数/赋值操作/容量和大小/插入和删除/数据存储/互换容器/预留空间24.deque容器/构造函数/赋值操作/大小操作/插入和删除/数据存取/排序25.案例--评委打分26.力扣---两数之和---unordered_map-STL容器学习目标:
掌握类模板成员函数分文件编写产生的问题以及解决方式
问题:
类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到
解决:
解决方式1:直接包含.cpp源文件
解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制
示例:
#include <iostream> using namespace std; //第一种解决方式,直接包含源文件 // #include "person.cpp" //第二种解决方式,将.h和.cpp中的内容写到一起,将后缀名改为.hpp文件 #include "person.hpp" // #include <string> // //类模板分文件编写问题以及解决 // 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",18); p.showPerson(); } int main() { test01(); return 0; }
Person.h->Person.hpp
#pragma once #include <iostream> using namespace std; #include <string> //类模板分文件编写问题以及解决 template<class T1,class T2> class Person { public: Person(T1 name, T2 age); void showPerson(); T1 m_Name; T2 m_Age; }; //#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; }
将person.cpp中的代码注释移动到person.hpp里
// #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; // }
总结:
主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)