当前位置: 首页 > 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.dtcms.com/a/277900.html

相关文章:

  • windows10如何安装vue开发环境
  • JAVA-springboot 整合Activemq
  • ECU(电子控制单元)是什么?
  • C++中顶层const与底层const
  • JSX 语法
  • 【前端知识】移动端APP原生应用与H5交互底层逻辑
  • Dubbo跨越分布式事务的最终一致性陷阱
  • 有效感受野(ERF)可视化工具
  • hash表的模拟--开放定址法
  • 如何将本地代码同步到远程Github仓库
  • 【Docker基础】Dockerfile指令速览:环境与元数据指令详解
  • OSPF与BGP的联动特性
  • Utils系列之内存池(MultiSizePool)
  • 【MLLM】多模态理解GLM-4.1V-Thinking模型
  • OpenVela 日志系统:从配置到落地的实操手册
  • Python装饰器(自定义装饰器和3个内置装饰器)
  • Java反射机制深度解析
  • 树莓派5-ollama-linux-arm64.tgz 下载
  • AEC线性处理
  • 在 OCI 生成式 AI 上搭一个「指定地区拉面店 MCP Server」——从 0 到 1 实战记录
  • 《数据库》MySQL事务
  • gcc 源码阅读--C语言预处理
  • (一)SAP Group Reporting (GR) 集团财务合并解决方案套件概述
  • 构造函数延伸应用
  • [Python 基础课程]字典
  • 代码随想录算法训练营第十七天
  • spring--@Autowired
  • LlamaIndex Querying 自定义查询
  • JavaScript数据结构算法
  • js入门01