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

营销型网站建设题库建站宝盒做的网站

营销型网站建设题库,建站宝盒做的网站,专业软文发稿平台,app制作价格相信大家都遇到过这么一种情况,为了满足不同类型的需求,我们要写多个功能相同,参数类型不同的代码,为此,C引入了泛型编程这一概念,而模板就是实现泛型编程的基础,其实本质就是我们写一个类似”模…

相信大家都遇到过这么一种情况,为了满足不同类型的需求,我们要写多个功能相同,参数类型不同的代码,为此,C++引入了泛型编程这一概念,而模板就是实现泛型编程的基础,其实本质就是我们写一个类似”模板”的代码,当遇到不同类型需求时,编辑器会按照我们写的模板,自动生成对应类型的函数或类,来防止相似的代码写很多遍的情况。

举个例子,假设我们要写一个交换函数

//以前
void Swap(int& x,int& y){int tmp=x;x=y;y=tmp;
}//....将类型换成我们需要的类型//现在
//函数模板
template<class T>
void Swap(T& x,T& y){T tmp=x;x=y;y=tmp;
}

一、函数模板

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

函数模板格式

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

注意:这里class和typename都可以,template的作用有点像typedef,这里特别提醒一点,每写一个函数模板或类模板,都要单独写一个template<>

下面写一个加法函数模板

template<class T>
T Add(const T& x, const T& y)
{return x + y;
}int main()
{cout << Add(1, 2) << endl;cout << Add(1.1, 2.2) << endl;return 0;
}

 底层实现:编辑器根据传的参数,自动推导类型,然后根据模板实例化函数,然后运行得出答案

函数模板的实例化---显式实例化和隐式实例化

上面的代码就是隐式实例化,即类型是编辑器自动推导的,不是我们给的,但是当参数的类型不同时( 如Add(1,1.2) ),编辑器就会出现问题,因为T可能是int,也可能是double

这时我们有两种选择

1.强转,将两个类型统一,这样隐式实例化就能成立

2.显式实例化,直接用Add<int>表明T的类型,不用编辑器自动推动,

注意:如果有多个<class T1,class T2,...,class Tn>要根据顺序对应着写类型

代码如下

template<class T>
T Add(const T& x, const T& y)
{return x + y;
}
int main()
{//强转cout << Add(1, (int)1.2) << endl;cout << Add((double)1, 1.2) << endl;//显示类型转换cout << Add<int>(1, 1.2) << endl;cout << Add<double>(1,1.2) << endl;return 0;
}

 当函数模板和实体函数同时存在时,如果不显示调用,编辑器会默认调用已经存在的实体函数,如下

函数模板的匹配原则 

1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数

2. 对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板

3. 模板函数不允许自动类型转换,但普通函数可以进行自动类型转换
 

二、类模板

类模板格式

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

类模板的实例化

举个例子

template<class T>
class Vector
{
private:T* _a;size_t _size;size_t _capacity;
public:Vector(size_t n = 4):_a(new T[n]),_size(0),_capacity(n){}//void push(T x);//...~Vector();
};template<class T>
Vector<T>::~Vector()//在类外写定义要加类型名,即类名+<>,而在正常类中,类型名==类名
{delete[] _a;_size = _capacity = 0;
}int main()
{Vector<int>s1;//必须显式实例化Vector<double>s2;return 0;
}

http://www.yayakq.cn/news/852397/

相关文章:

  • 恒星科技网站建设网站仿制公司
  • 网站开发的经费预算seo网页优化公司
  • 阿里服务器怎么做网站服务器吗潍坊制作网站软件
  • 网站制作费用申请网站怎么做短信接口
  • 找公司建网站报价企业网站建设过程
  • 福建有没有网站做鞋子一件代发可以自己制作广告的软件
  • 襄阳php网站开发手机营销软件
  • 软件网站开发团队名称做网站需要哪些步骤
  • 西安哪家公司网站做的好企业信用信息查询公示系统全国
  • 网站开发的成本wordpress 商业授权
  • 园区网互联及网站建设项目科技经济导刊官网
  • 做网站需要准备资料做特卖的网站怎么赚钱
  • 联通公司网站谁做的做租人网站犯法吗
  • 做网站 设备软件开发项目报价模板
  • c 网站开发教程 购物网站大连建设网水电费查询网址
  • 海安建设银行网站wordpress导入
  • 网站域名在哪里申请宁波seo网络推广外包报价
  • 深圳网站定制开发3d视频制作公司
  • 重庆营销型网站建设上海做网站哪家公司好
  • 免费做毕业视频的网站网站建设采用thinkphp框架的优势
  • h5制作网站 有哪些怎么在wordpress免费注册博客网站
  • 花生壳网站建设企业所得税优惠政策2021年最新
  • app应用下载网站源码网络营销的目标
  • 海口网站建设策划方案网站举报后还是没封掉
  • 网站登录和权限怎么做免费企业网站建设
  • 哪个网站可以做装修效果图上海网络推广服务公司
  • 青岛做网站推广公司哪家好品牌vi形象设计公司
  • 企业网站要怎么建设集安网站制作
  • 电商网站模板素材做网络推广
  • 有什么兼职做设计的网站好黑马程序员学费多少钱