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

C++语法之模板函数和模板类

模板函数是什么?就是不指定类型的函数,不指定类型如何写代码?所以得用到模板,可以先用模板代替,就好像方程式,先用x,y代替一样。

它的写法是这样,定义函数时,开头加一句:(其中的T就相当于x,y之类的)

template <typename T>

表示下面是个模板函数,完整代码:

#include <iostream>

using namespace std;
//定义模板函数
template<typename T>
void out(T a)
{
    cout << a << endl;
}

int main() {
  
    int a = 112;
    char str[10] = "hello";
    out(a);
    out(str);    
}

可以看到,out函数,传入不同类型的参数都正常执行。

这里的typename T,typename表示定义了一个模板参数,用T代替了具体类型。

当然这个T你也可以取别的名字,然后可以有多个typename。只要调用时一致就行。

如:

template<typename T1,typename T2>

这种模板函数,是在编译时根据调用的具体参数来生成函数代码,并不是编译后的代码实现了这个功能。需要明白。

所以像上面,调用时分别传入了int和char类型,那么编译器就会生成两个函数代码,一个是int类型,一个是char类型。

模板函数,适用于不同的类型有着共同的代码,本质上是为了方便灵活编程。 

模板类

了解了模板函数,接下来我们再来看看模板类又是怎么回事。

定义了模板类后,那类里面的变量类型也同样可以用模板代替的,如下:

#include <iostream>

using namespace std;
//定义模板类
template<typename T>
class cOut {

public:
    T ca; //可以定义成员变量
    void out(T a)  //参数类型用T代替
    {
        cout << a << endl;
        ca = a;
    }
};


int main() {
  
    int a = 112;
    char str[10] = "hello";
    cOut<int> ct;//定义类对象
    ct.out(a);

    cOut<char*> cs;
    cs.out(str);

}

运行效果:

这里的模板类跟模板函数一样,编译器是没有生成具体的代码的。

所以在定义模板类对象时,必须显式指定类型,告诉编译器生成那种类型的类代码实例化。

如:

  cOut<int> ct;//int类型
  cOut<char*> cs;// char *类型

就是尖括号加类型名。

所以我们以后看到类似的定义就能知道这大概是个模板类呢,不要奇怪这种用法。 

相关文章:

  • 理解操作系统(一)冯诺依曼结构和什么是操作系统
  • 第六章 | Solidity 函数与可见性修饰符全面讲解
  • Dataset和Dataloader
  • 解锁云原生后端开发新姿势:腾讯云大模型API实战攻略
  • 微调大模型:LoRA、PEFT、RLHF 简介
  • 二分查找------练习2
  • Numpy 简单学习【学习笔记】
  • 基于CNN的FashionMNIST数据集识别6——ResNet模型
  • Python 异步编程
  • MIT6.5840 lab3A
  • llama源码学习·model.py[7]Transformer类
  • gcc -fPIC 选项
  • 浅谈Qt事件子系统——以可拖动的通用Widget为例子
  • AI 驱动视频处理与智算革新:蓝耘MaaS释放海螺AI视频生产力
  • one-hot标签详解
  • 6.4考研408数据结构图论核心知识点深度解析
  • DHCPv6 Stateless Vs Stateful Vs Stateless Stateful
  • RAG文本分块的魔法与智慧:传统分块与延迟分块,选哪个?
  • 程序代码篇---Pyqt的密码界面
  • Jetpack Compose 选项卡控件实现
  • 陕西澄城打造“中国樱桃第一县”:从黄土高原走向海外,年产值超30亿
  • 两次蹚入同一条河,巴萨这一晚被命运抛弃
  • 巴基斯坦宣布关闭全国空域48小时
  • 江南华南较强降雨扰返程,北方大部需防风沙
  • 韩国代总统、国务总理韩德洙宣布辞职
  • 蔡澜回应“入ICU观察”称未至于病危,助理:只是老毛病