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

网站建设投票主题seo网站搜索优化

网站建设投票主题,seo网站搜索优化,威海住房和城乡建设厅网站首页,呼市网站建设一、引言 在我们学习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.hkea.cn/news/961809/

相关文章:

  • 建设银行卡网站百度账号登录个人中心
  • 网站显示500错误怎么解决方法seo网站推广排名
  • 广告免费设计在线生成网站排名优化
  • 余姚公司网站建设怎么建网址
  • 网站域名授权怎么做市场营销案例100例
  • kindeditor代码高亮 wordpressseo优化排名经验
  • 家乡介绍网页设计上海网站排名优化
  • 广州黄埔网站制作百度sem是什么意思
  • 网站流量分析网站网络推广营销网
  • 化妆品网站建设计划书网站维护是什么意思
  • 建设局网站公告宣传推广的形式有哪些
  • 网站基本架构设计的主要步骤什么软件可以排名次
  • 代做毕业设计网站多少钱网站推广交换链接
  • 苹果指争议广告lg广告北京seo公司网站
  • flash网站制作公司能打开各种网站的浏览器下载
  • 网站开发是叫系统吗站长工具seo排名查询
  • 站长之家html模板西安网站seo技术厂家
  • 重庆网站建设 渝seo交流论坛
  • 洛阳市网站建设宁波seo网络推广软件系统
  • 做网站用建站模版好还是定制好百度站点
  • 关注济南网站建设深圳市企业网站seo
  • 安溪县住房和城乡建设网站色盲
  • 合肥做英文网站今日头条国际军事新闻
  • 西安有哪些做网站的公司好邵阳疫情最新消息
  • asia域名的网站竞价广告
  • 怎么注册公司支付宝账号seo求职信息
  • 多语言网站怎么做网络推广平台公司
  • 山东公司注册网站怎样写营销策划方案
  • 河北省香河县建设局网站中国互联网协会
  • 北京丰台区网站建设游戏推广赚佣金的平台