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

深圳企业登记注册宁波关键词优化企业网站建设

深圳企业登记注册,宁波关键词优化企业网站建设,做网站用的插件,湖北建设网站首页一、引言 在我们学习C时,常会用到函数重载。而函数重载,通常会需要我们编写较为重复的代码,这就显得臃肿,且效率低下。 重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就…

一、引言

在我们学习C++时,常会用到函数重载。而函数重载,通常会需要我们编写较为重复的代码,这就显得臃肿,且效率低下。

 重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数。此外,代码的可维护性比较低,一个出错可能会导致所有的重载均出错。

那么,模板的出现,就让这些问题有了解决方案。

这里就不得不提及一个概念:泛型编程。

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

而模板则分为函数模板和类模板。

二、函数模板

1、概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

2、使用

这就是模板的常用格式。

typename是用来定义模板参数关键字,也可以使用class

T则是我们取的名字,也可以不叫T,取成任意名字(比如A)

//模板
template<class T>
template<typename T>
template<typename T1,typename T2>

下面是函数模板的一个简单应用。 

template<typename T>
T Add(const T& x, const T& y)
{return x + y;
}int main()
{cout << Add(2, 3) << endl;return 0;
}

但是,在使用函数模板时有几个点需要注意: 

(1)传参类型不匹配

当传参类型不匹配时,可以采用显式实例化;

也可以使用强制转换,使得类型匹配。

template<typename T>
T Add(const T& x, const T& y)
{return x + y;
}int main()
{cout << Add<int>(1.1, 2) << endl; //显式实例化cout << Add((int)1.1, 2) << endl;return 0;
}

(2)可以定义同名函数吗

当然是可以的。

并且,在调用时,若可以匹配上,则会优先调用它,而非使用模板生成。

template<typename T>
T Add(const T& x, const T& y)
{return x + y;
}int Add(int x, int y)
{return x + y;
}int main()
{cout << Add(2, 3) << endl;//不会使用模板cout << Add<int>(1.1, 2) << endl; //显式实例化cout << Add((int)1.1, 2) << endl;return 0;
}

3、原理

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。

在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。

三、类模板

1、格式

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

2、使用

这是我们定义的一个栈。

template<class T>
class Stack
{
public:Stack(int capacity = 4):_array(new T[capacity]),_size(0),_capacity(capacity){cout << "Stack()" << endl;}~Stack(){delete[] _array;_size = 0;_capacity = 0;cout << "~Stack()" << endl;}void Push(const T& data){if (_capacity == _size){int newcapacity = _capacity == 0 ? 4 : _capacity * 2;T* tmp = new T[newcapacity];memcpy(tmp, _array, sizeof(T) * _size);_array = tmp;_capacity = newcapacity;}_array[_size] = data;_size++;}private:T* _array;int _size;int _capacity;};

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


int main()
{//Stack是类名,Stack<int>才是类型Stack<int> st1; st1.Push(1);st1.Push(2);st1.Push(3);st1.Push(4);st1.Push(5);Stack<float> st2;st2.Push(1.1);return 0;
}

http://www.ds6.com.cn/news/101290.html

相关文章:

  • vs2013做简单的网站制作网站
  • 只做山寨的网站网络推广内容
  • 安徽网站东莞seo项目优化方法
  • 内丘网站衡阳网站建设公司
  • 沈阳网络关键词排名杭州网站优化多少钱
  • 有趣的网站名seo关键词排行优化教程
  • 本科自考什么机构比较正规站外seo推广
  • 青岛网站搭建公司seo人人网
  • 平面设计大赛网站简短的软文范例
  • 做推广哪个平台网站好公众号推广方案
  • 邵阳网站建设哪家好长春关键词搜索排名
  • 长春网站建设联系吉网传媒优微信怎么引流营销呢
  • 中国建设企业银行官网站网络推广渠道和方式
  • 中山做网站的公司网络营销课程个人总结3000字
  • 做古代风格头像的网站网上营销策略有哪些
  • 公网动态ip如何做网站seo高效优化
  • 用国外服务器做赌博网站婚恋网站排名前三
  • 宁波网站建设优化找哪家搜索引擎营销特点是什么
  • 网站开发项目总结模板今日热榜
  • wordpress多站点管理自媒体seo优化
  • 上海企业信息查询系统官网上海知名seo公司
  • 动态网站建设作业谷歌官网入口手机版
  • 新图闻的品牌建设经验网站seo文章
  • 长沙开发网站的公司交换友情链接是什么意思
  • 网站站长统计怎么弄权威解读当前经济热点问题
  • 淘宝联盟怎么做网站推广友情链接交换网
  • 专业网站托管市场监督管理局投诉电话
  • 海口网站建设公司营销型网站建设多少钱
  • 阿里云服务器开源做几个网站搜索优化引擎
  • 为什么要做网站建设信息互联网推广