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

C++模版初阶

目录

1.函数模版

1.写法与作用

2.推导实例化

3.显式实例化

2.类模版

3.typename


1.函数模版

1.写法与作用

template<class T>
T add(T a, T b)
{return a + b;
}

模版本质是为了适应指定类型,而不用写多个函数重载完成同一功能。

这个加法函数就可以适应int、double等类型的加法。

2.推导实例化

//推导实例化
int a = 0, b = 0;
double c = 3.0, d = 4.0;
int e = add(a, b);
double f = add(c, d);

在这里模版函数会识别实参的类型来推导那个T类型是什么类型。

3.显式实例化

//显式实例化
int a = 0, b = 0;
double c = 3.0, d = 4.0;//指定T类型为int类型
int e = add<int>(a, b);
//指定T类型为double类型
double f = add<double>(c, d);

2.类模版

template<class T>
class Stack
{
public://实现了可以用栈存储不同类型的数据的功能Stack(int n = 4):_array(new T[n]),_size(0),_capacity(n){}~Stack(){delete[] _array;_array = nullptr;_size = _capacity = 0;}void Push(const T& x);private:T* _array;size_t _capacity;size_t _size;
};//声明与定义分离,需要指定类域与类模版template<class T>
void Stack<T>::Push(const T& x)//用引用减少拷贝构造,提高效率
{if (_size == _capacity){T* tmp = new T[_capacity * 2];memcpy(tmp, _array, sizeof(T) * _size);delete[] _array;_array = tmp;_capacity *= 2;}_array[_size++] = x;
}int main()
{// 类模板都是显示实例化Stack<int> st1; // intst1.Push(1);st1.Push(2);st1.Push(3);Stack<double> st2; // doublest2.Push(1.1);st2.Push(1.1);st2.Push(1.1);Stack<double>* pst = new Stack<double>;//...delete pst;return 0;
}

3.typename


http://www.mrgr.cn/news/33420.html

相关文章:

  • 初识APC机制实现APC注入
  • 有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳
  • NLP 序列标注任务核心梳理
  • Linux —— 网络基础(一)
  • MySQL锁机制
  • 计算机毕业设计 基于Python的荣誉证书管理系统 Django+Vue 前后端分离 附源码 讲解 文档
  • 详解ps用法
  • 求10000以内n的阶乘(高精度运算)
  • golang学习笔记5-基本数据类型的转换
  • Transcipher:从对称加密到同态加密
  • 部署林风社交论坛/社交论坛linfeng-community遇到问题集合
  • 大数据:驱动企业变革的引擎
  • C++如何进阶? -- 整理一些学习资料
  • Mixamo动画使用技巧
  • 充电桩小程序系统开发源码
  • 黑马十天精通MySQL知识点
  • ollama设置开机启动服务
  • Tomcat靶场攻略
  • django应用JWT(JSON Web Token)实战
  • 使用 CMake 创建和调用动态库在 Windows 和 Ubuntu上的差异