ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

关于C++类模板template<typename T>的使用

2021-05-14 22:00:51  阅读:212  来源: 互联网

标签:Student int C++ typename template print 模板 函数


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

 

标签:Student,int,C++,typename,template,print,模板,函数
来源: https://blog.csdn.net/weixin_43011182/article/details/116806175

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有