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

湖北疾控发布最新通告南京百度seo代理

湖北疾控发布最新通告,南京百度seo代理,wordpress 获取js路径,2022电商平台用户排行榜文章目录 一、函数模板1.什么是函数模板?2.函数模板格式3.函数模板原理4.函数模板实例化(1)隐式实例化(2)显示实例化 二.类模板1.类模板定义格式2.类模板的实例化 总结 一、函数模板 1.什么是函数模板? 函…

文章目录

  • 一、函数模板
    • 1.什么是函数模板?
    • 2.函数模板格式
    • 3.函数模板原理
    • 4.函数模板实例化
      • (1)隐式实例化
      • (2)显示实例化
  • 二.类模板
    • 1.类模板定义格式
    • 2.类模板的实例化
  • 总结


一、函数模板

在这里插入图片描述

1.什么是函数模板?

函数模板简单来说就是一个模板,与函数参数的类型无关,是一个模子,不是真正的函数,实例化的函数会根据实参的类型自动推导类型。

2.函数模板格式

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

3.函数模板原理

函数模板是一个模板,并不是真正的函数,它是根据传递过来的实参的类型实例化一个具体的函数,相当于我们将重复的事情交给了编译器来操作。

比如说:

template<typename T>T Add(const T& a1, const T& a2)
{return a1 + a2;
}int main()
{int a = 10, b = 20;double c = 3.14,d = 2.11;cout << Add(a, b) << endl;cout << Add(c, d) << endl;	return 0;
}

我们定义了一个加法函数的函数模板,来进行加法操作,函数模板会根据我们传递的实参的类型自动实例化出不同的Add函数,这些函数之间构成函数重载。

4.函数模板实例化

(1)隐式实例化

举一个简单的例子:
在我们定义的函数模板中,只给定一个模板参数类型,但是我们可能会有两个不同的实参类型。

template<typename T>T Add(const T& a1, const T& a2)
{return a1 + a2;
}int main()
{int a = 10;double b = 20.3;cout << Add(a, b) << endl;return 0;
}

对于只有一个类型的函数模板,却同时出现了两种不同类型的实参,编译器就无法确认到底用哪个实参类型实例化了。

解决办法:

int main()
{int a = 10;double b = 20.3;cout << Add((double)a, b) << endl;cout << Add(a, (int)b) << endl;//可能存在精度丢失的情况return 0;
}

隐式类型转换,就可以解决编译器无法识别的情况。

(2)显示实例化

template<typename T>T Add(const T& a1, const T& a2)
{return a1 + a2;
}int main()
{int a = 10;double b = 20.3;cout << Add(a, b) << endl;return 0;
}

对于这个案例,还有一种解决方案:

int main()
{int a = 10;double b = 20.3;cout << Add<int>(a, b) << endl;return 0;
}

这样的方法叫做显式实例化,实际生活中,我们很少会遇到需要显式实例化的情况,不过对于下面的情况,就必须要显式实力化。

template<class T>
T* Alloc(int n)
{return new T[n];
}int main()
{Alloc<double>(10);return 0;
}

在这样的情况下,我们没有使用函数模板类型,所以仅仅传递实参n无法推导T的类型,这种情况下必须要使用显式实例化。

二.类模板

1.类模板定义格式

template<class T1, class T2, ..., class Tn>
class 类模板名
{// 类内成员定义
};

2.类模板的实例化

注意:

普通类的类型和类名相同
模板类的类型和类名不同

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可。

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

比如:

// string类名,string<int>才是类型
string<int> s1;
string<double> s2;

1.不管是类模板还是函数模板,其作用范围就是紧跟着的类/函数。

也就是看{}

2.类模板中函数放在类外进行定义时,需要加模板参数列表
比如:

template<typename T>
class Stack
{
public:Stack(size_t capacity = 3);void Push(const T& data);   // 其他方法...~Stack(){if (_array){delete[]_array;_capacity = _size = 0;}}private:T* _array;int _capacity;int _size;
};//缺省参数不能给在函数定义,只能在声明给缺省值
//模板的作用域就是专门给一个函数或者一个类用的
//可以看{}的作用范围是那里,模板的作用范围就是哪里。
template<typename T>
Stack<T>::Stack(size_t capacity)
{_array = new T[capacity];_capacity = capacity;_size = 0;
}template<typename T>
void Stack<T>::Push(const T& data)
{// CheckCapacity();_array[_size] = data;_size++;
}

函数在类外面进行定义时,需要加类模板的参数列表。

注意:不建议模板实例化出来的函数的声明和定义分离。
注意:不建议模板实例化出来的函数的声明和定义分离。
注意:不建议模板实例化出来的函数的声明和定义分离。

上面的例子仅仅是为了演示。


总结

本文讲述了函数模板和类模板的相关问题。

http://www.zhongyajixie.com/news/19690.html

相关文章:

  • 电商类网站建设合同书网络软文是什么意思
  • 在那可以做公司网站谷歌在线浏览器入口
  • 上海浦东注册公司湖南企业竞价优化
  • 怎么用html做移动网站公关公司的主要业务
  • asp.net做网站如何展示界面乌鲁木齐seo
  • 做打鱼网站的代理怎样通过网络销售自己的产品
  • 广州南沙发布小红书seo优化
  • 免费自助建站软件有哪些百度手机助手app官方下载
  • 如何做网站商城seo收费
  • 免费网站开发框架seo推广公司哪家好
  • 做网站用到什么技术广州网站快速优化排名
  • 大型医疗网站建设seo黑帽技术有哪些
  • 网站建设信息模板站长工具综合查询系统
  • 品牌建设网站规划网推拉新app推广接单平台
  • 艺术网站制作排名优化哪家专业
  • 培训网站建设学校北京外贸网站优化
  • 企业网站开发有哪些今日军事新闻热点事件
  • 网站网页制作电话北京排名seo
  • 单页营销网站模板最权威的品牌排行榜网站
  • 做任务赚钱的网站起什么名字好产品免费推广网站有哪些
  • 燕郊个人做网站关键词排名手机优化软件
  • 用ai怎么做网站山西seo优化
  • wordpress做的学校网站会计培训班一般收费多少
  • 微信公众号和wordpress合肥seo排名收费
  • 中国十大网站建设企业网站运营策划书范文
  • 特产网站模板中国十大电商公司排名
  • 网站建设服务费武汉seo优化排名公司
  • 安庆网站建设服务网青岛百度推广优化
  • c 网站开发实例seo关键词优化工具
  • 永清建设局网站网络营销案例ppt