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

类模板函数模板

准备看个项目找实习,边看边学,一看到处都是template 和typename,好几年前学的C++都忘记光了,在这里先做个笔记复习一下。

template <class T>
T abs(T x) {if(x < 0) return -x;return x;
}
int main()
{int x = 1;cout << abs(x);return 0;
}

上面是一个函数模板的例子,注意class改成typename在这种场景是一摸一样的。

函数模板VS模板函数

上面这玩意儿叫做函数模板,这两个容易搞混,就好像豆腐一碗和一碗豆腐,我们把重点放在后面

函数模板就是模板,模板函数就是函数。

函数模板本质上是函数重载的一种实现,在定义函数模板的时候是不是有自定义类型<class T> 或者<typename T>,当上面代码中abs(x)的时候,就会生成一个模板函数,将class T变成int类型,这个生成的重载函数就叫做模板函数。

从函数模板产生的模板函数都是同名的,C++在编译的时候会将重载函数取名字

例如

void foo(int x, int y);

C 编译之后在符号库中的名字为_foo,而C++编译器会产生像_foo_int_int之类的名字,这也是C++支持重载的原因(想了解更多可以搜一下extern C)。

那么在生成这个模板函数的过程中,万一有多个同名的重载函数,编译器会按照哪一个生成呢?

答案是:非模板函数>模板函数>类型转换。https://blog.csdn.net/Slience_Perseverance/article/details/20574423


类模板:

类模板的成员函数被认为是函数模板,因此当给出一个类模板的成员函数定义必须遵循函数模板的定义。

首先看类模板格式

template <typename T>
class Array
{int size;T *p;
public:Array();Array(int n);T &operator[](int) const;
};

看上面黑体字,按照函数模板定义类成员函数

template <typename T>
Array<T>::Array()
{size = 10;p = new T[size];
}
template <typename T>
Array<T>::Array(int n)
{size = n;p = new T[size];
}
template <typename T>
T& Array<T>::operator[] (int i) const
{if(i >= 0 && i < size)return p[i];
}

这个就是对那个重载成员函数进行实现的代码。

在类模板之外定义成员函数就要按照上面这种方式。

类模板实例化

Array<int> m;
Array<int> m(5);

都是可以的,可以自行测试。

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

相关文章:

  • Leetcode DAY 56: 两个字符串的删除操作 and 编辑距离
  • 系统检测维护工具Wsycheck使用(18)
  • 111 ok
  • Python API教程:API入门
  • SpringMVC学习笔记
  • Linux学习记录01
  • VScode 插件【配置】
  • 基于 Rainbond 的 Pipeline(流水线)插件
  • ASGARD:单细胞导向的药物发现
  • js-DOM03-事件
  • 天梯赛题目练习L1-007--L1-009
  • 来吧!接受Kotlin 协程--线程池的7个灵魂拷问
  • Dynamic Movement Primitives (DMP) 学习
  • 2023王道考研数据结构笔记第五章——树
  • setState函数是异步的还是同步的?
  • vue3+ts:约定式提交(git husky + gitHooks)
  • TSP 问题求解的最好方法 LKH
  • RocketMQ5.1控制台的安装与启动
  • 【java基础】类型擦除、桥方法、泛型代码和虚拟机
  • 十家公司有九家问过的软件测试面试题,最后一题我猜你肯定不会
  • C++核心知识(三)—— 静态成员(变量、函数、const成员)、面向对象模型(this指针、常函数、常对象)、友元、数组类、单例模式
  • RocketMQ【3】Rocketmq集群部署(多master多slave)异步复制
  • 魏玛早春 木心
  • 关于Scipy的概念和使用方法及实战
  • 第二章Linux操作语法1
  • linux内核调度问题分析
  • C语言-基础了解-25-C强制类型转换
  • 【Python】如何安装 Allure 工具进行自动化测试
  • nginx七大核心应用场景详解 解决生产中的实际问题 二次开发扩展
  • Java 整合 Redis