关于C++类模板template<typename T>的使用
2021/5/14 22:25:15
本文主要是介绍关于C++类模板template<typename T>的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
template是C++11引入的关键字模板。
在阅读代码中遇到,因此展开了相关的学习。
template的使用方式有两种。
template <typename 类型参数> class 类名{ 类成员声明 }; 或者 template <class 类型参数> class 类名{ 类成员声明 };
两种表达方式是没有区别的。
类型参数,在调用函数时候可以替换为需要的数据类型,例如:int,char,string等等。
我理解的这样做的好处是可以灵活的改变类成员的数据类型,避免因为数据类型,重复书写类。这种的想法,和函数重载有所类似。
需要注意的是,当成员函数中包含有类型参数,且在类外对函数进行定义时,需要在函数定义前对类模板进行声明。
下面按步骤示例一个包含一个类模板的程序
①定义类模板和一个类
#include <iostream> ///template<typename *> 或者 template<class *> 同理 ///只使用一个模板类,在模板外定义函数 template<typename T> class Student{ public : Student(T v1,int v2); //构造函数 void print(); //成员函数 private: std::string name; int score; };
可以看出,Student(T v1,int v2)中,我们可以定义第一个形参是T类型,第二个形参是int类型。在后续调用该函数的时候,T的类型是可以由我们自己决定的。
②下面让我们来写定义类中的函数。
template<typename T> void Student<T>::print() { std::cout<<name <<":"<<score; } template<typename T> Student<T>::Student(T v1,int v2) { name = v1; score=v2; }
首先,我们进行了声明,每一个函数前都要进行声明。基本格式就是:
返回类型 类名<类型参数>函数名(形参)
③创建对象,使用函数
int main() { Student<std::string>student1("Jake",100); student1.print(); return 0; }
可以看出,在示例代码中,我们使用了string类型。以上就是一个简单的、完整的应用过程。完整代码贴出:
#include <iostream> ///template<typename *> 或者 template<class *> 同理 ///只使用一个模板类,在模板外定义函数 template<typename T> class Student{ public : Student(T v1,int v2); //构造函数 void print(); //成员函数 private: std::string name; int score; }; template<typename T> void Student<T>::print() { std::cout<<name <<":"<<score; } template<typename T> Student<T>::Student(T v1,int v2) { name = v1; score=v2; } int main() { Student<std::string>student1("Jake",100); student1.print(); return 0; }
※两个类型参数的类模板举例
///使用两个类模板,可以解决两个参数类型都需要变化的情况。可以想象,如果只有一个类模板,除非固定了一个其他类型的形参,不然形参的类型都是一种 template<typename T1,typename T2> class Student{ private: T1 name; T2 score; public: Student(T1 a, T2 b); void print(); }; template<typename T1,typename T2> Student<T1,T2>::Student(T1 a, T2 b) { name=a; score=b; } template<typename T1,typename T2> void Student<T1,T2>::print(){ std::cout<< name <<": "<<score <<std::endl; } int main(){ Student<std::string , int> lan("Jack",100); lan.print(); return 0; }
这篇关于关于C++类模板template<typename T>的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升