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

深圳住房和建设局网站哪里预约公司企业官网建设价格

深圳住房和建设局网站哪里预约,公司企业官网建设价格,gae建立wordpress博客,邢台网站推广费用文章目录泛型编程:概念函数模板概念:🚩函数模板格式原理:🚩函数模板实例化与非模板函数共存类模板类模板实例化泛型编程: 概念 🚩编写与类型无关的通用代码,是代码复写一种手段&am…

文章目录

  • 泛型编程:
    • 概念
  • 函数模板
    • 概念:
    • 🚩函数模板格式
    • 原理:
    • 🚩函数模板实例化
    • 与非模板函数共存
  • 类模板
    • 类模板实例化

泛型编程:

概念

🚩编写与类型无关的通用代码,是代码复写一种手段,模板是泛型编程的基础

如果我们想写一个通用的交换代码 ?

void Swap(int& a, int& b)
{int t = a;a = b;b = t;
}
void Swap(double& a, double& b)
{int t = a;a = b;b = t;
}
void Swap(char& a, char& b)
{int t = a;a = b;b = t;
}

我们需要写各种类型代码,由于函数重载这样可以实现,但这也太麻烦了!!

如果有个模具,我们需要什么类型 加进去就能用多好,

在这里插入图片描述

函数模板

概念:

函数模板代表了一个函数家族,该函数模板与类型无关,在需要时实参化,根据实参类型产生相应特殊函数,

🚩函数模板格式

template<typename T1, typename T2,…,typename Tn>
返回值类型 函数名(参数列表){}

所以交换函数实现:

template<typename T>
void Swap(T &a,T& b)
{T temp = a;a = b;b = t;
}

注意typename是定义模板参数的关键字,也可以用class代替(但不能用struct)

原理:

在编译阶段,编译器会通过根据传入的实参类型推演出正确的模板参数类型,然后编译器生成一份正确的代码
在这里插入图片描述

🚩函数模板实例化

隐式实例化:让编译器自动识别:

#include <iostream>
using namespace std;
template<typename T>
void Swap(T &a,T& b)
{T temp=a;a = b;b = temp;cout << a << " " << b<<endl;
}
int main()
{int a1 = 10, a2 = 20;double b1 = 10.5, b2 = 20.5;Swap(a1, a2);Swap(b1, b2);return 0;
}

20 10
20.5 10.5

但是有个问题,如下

int a3 = 30;
double b3 = 30.5;
Swap(a3, b3);

报错了,
因为就一个T,不知道是int还是double了,
1,我们可以强转
2,显性实例化

int a3 = 30;
double b3 = 30.5;
Swap((double)a3, b3);

出错了,但没办法QAQ
强转会产生临时变量,引用不能接受,实例化也没用,模板参数加const又不能交换QAQ,所以我们只能先换个函数继续讲QAQ

显性实例化:在函数名后接<>,里面指定模板函数实际类型

#include <iostream>
using namespace std;
template<typename T>
void Add(const T& a,const T& b)
{cout << a + b << endl;
}
int main()
{int a4 = 40;double b4 = 40.5;Add((double)a4, b4);Add<int>(a4, b4);return 0;
}

80.5
80

与非模板函数共存

模板函数是可以和非模板函数共名的,编译器会优先考虑非模板函数,

#include <iostream>
using namespace std;
template<typename T>
void Add(const T& a,const T& b)
{cout << a + b << endl;
}
void Add(int a, int b)
{cout << "sum=";cout << a + b << endl;
}int main()
{int a4 = 40;double b4 = 40.5;Add((double)a4, b4);Add<int>(a4, b4);Add(1, 2);Add(1,2.1);return 0;
}

80.5
80
sum=3
sum=3

后两个用非模板,说明如果合适,编译器优先非模板函数,处理不了就用模板函数,
注意:模板函数不能自动转换,非模板函数能自动转换类型

类模板

格式:

template<class T1,class T2,…,class T3>
class 类模板名 {
};

//实现一个动态顺序表
template<class T>
class vector
{
public:vector(int capacity=0):_pDate(new T[capacity]),_size(0),_capacity(capacity){}T& operator [](size_t pos){if(pos<size)return _pDate[pos];}size_t size(){return _size;}~vector();//类中声明,类外定义
private:T* _pDate;size_t _size;size_t _capacity;
};
template<class T>
vector<T>::~vector()
{if (_pDate)delete[] _pDate;_size = _capacity = 0;
}

如果在类外定义函数,需要加模板列表

类模板实例化

类模板实例化和函数模板实例化不同,需要在类模板名字后面加<>,里面存的是需要实例化的类型

int main()
{vector<int> s1;vector<double> s2;return 0;
}

类模板名字不是真正的类,实例化的结果才是真正的类,

http://www.dtcms.com/wzjs/565751.html

相关文章:

  • 中国城乡建设部网站证书查询上海企业建设网站服务
  • 网店网页制作工具抖音seo工具
  • 厦门网站设计个人网站开发预留接口
  • 低价建设手机网站现在网站开发用什么
  • 网站布局方案福建省建设工程继续教育网站
  • 锤子 网站 模版暴雪回归
  • 企业如何应用网站的wordpress添加数据库文件
  • 网站备案查询不到模版网站系统
  • 做婚庆网站图片下载网站的营销推广方案及预算
  • 做网彩网站做二手家电市场加什么网站可以
  • 河北手机网站制作多少钱国内最新新闻事件摘抄
  • 淄博网站建设公司有多少家网站建设的工具是
  • 网站建设优化项目腾讯邮箱注册
  • 宁波做网站有哪些公司公司专业网站建设方案
  • 做网站 设计师很ui设计要学几个软件
  • 临西县建设网站wordpress手机号
  • 网站备案 取名资讯通不过开发软件的应用
  • 网站管理是什么工作西安官网排名推广
  • 企业做网站上海河北手机响应式网站建设设计
  • 遵义网站建设网帮你网络运营培训
  • 淄博网站建设高端企业提供家居企业网站建设
  • 企业网站设计解决方案做搬家网站的素材
  • 建设网站的模板pc端网站开发工具
  • 网站关键词密这么稀释网站qq访客采集系统_访客qq获取系统源码网站客户qq抓取代码
  • 温州网站建设报价如果做微商需不需要开个网站。
  • 制作网站代码批量网站建设合作协议
  • 建设的招标网站管理公司网站设计
  • 宁波网站制作流程网站宣传软文
  • 浙江王氏生态建设网站怎么做自动发卡的网站
  • 屏蔽ip地址访问网站做sgs认证公司网站