当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/586699.html

相关文章:

  • 第三章-提示词-探秘大语言基础模型:认知、分类与前沿洞察(9/36)
  • 《Linux篇》自动化构建-make/Makefile
  • 咪咕盒子Mgv3200_mgv3201九联UNT403G_UNT413G烽火HG680-GC通刷优盘强刷包及TTL线刷烧录救砖包 当贝纯净版固件
  • 基于SpringBoot3集成Kafka集群
  • CentOS 7 升级系统内核级库 glibc 2.40 完整教程
  • docker运行redis指定配置+jdk17安装在centos7
  • C#单例模式管理全局变量
  • 【Linux 学习指南】网络基础概念(一):从协议到分层,看透计算机通信的底层逻辑
  • 【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5私有化部署保姆级教程与多功能界面窗口部署
  • 文心一言大模型4.5系列开源测评
  • 开源链动2+1模式、AI智能名片与S2B2C商城小程序在私域运营中的协同创新研究
  • 笔记-极客-DDD实战-基于DDD的微服务拆分与设计
  • mysql复合条件匹配的查询优化
  • jeepay开源项目开发中金支付如何像其他支付渠道对接那样简单集成,集成服务商模式,极简集成工具。
  • (dp、贪心)洛谷 P8179 Tyres 题解
  • 012_PDF处理与文档分析
  • hash表的模拟--开放定址法
  • AI 助力:如何批量提取 Word 表格字段并导出至 Excel
  • 学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)
  • 行测速算之假设分配法
  • 在 JetBrains 系列 IDE(如 IntelliJ IDEA、PyCharm 等)中如何新建一个 PlantUML 文件
  • Java集合框架深度解析:LinkedList vs ArrayList 的对决
  • 【Linux | 网络】应用层(HTTP)
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 【PTA数据结构 | C语言版】简单计算器
  • 【Linux】线程机制深度实践:创建、等待、互斥与同步
  • 详解Linux下多进程与多线程通信(二)
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器
  • linux上的软挂载操作方法
  • DAY02:【ML 第一弹】KNN算法