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

游戏钓鱼网站怎么做品牌策划包括哪几个方面

游戏钓鱼网站怎么做,品牌策划包括哪几个方面,铜陵市住房和城乡建设局网站,wordpress设置新窗口打开目录 前言: 1.泛型编程 2.函数模版 3.类模版 为什么要有类模版?使用typedef不行吗? 类模版只能显示实例化: 注意类名与类型的区别: 注意类模版最好不要声明和定义分离: 总结: 前言&…

目录

前言:

1.泛型编程

2.函数模版

3.类模版

为什么要有类模版?使用typedef不行吗?

类模版只能显示实例化:

注意类名与类型的区别:

注意类模版最好不要声明和定义分离:

总结:


前言:

正如标题而言,这里只是对模版的简单认识与使用,方便后面博客介绍stl中一些容器的实现,更复杂详细的模版相关的内容将会在模版进阶中介绍。

1.泛型编程

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

而模版又分为函数模版与类模版。

2.函数模版

template<class T>
void Swap(T& x, T& y)
{T tmp = x;x = y;y = tmp;
}int main()
{int a = 1, b = 2;double c = 1.0, d = 2.0;Swap(a, b);Swap(c, d);return 0;
}

首先要注意第一点:

两次调用的Swap函数实际都不是同一个函数,第一是函数调用开辟的栈帧都不一样大,一个是int,一个是double;第二是汇编call的函数的地址也是不一样的。

这里的class可用typename替换,区别在后面的学习中会介绍。

 

补充一下库中的swap函数:

 

那模版参数是怎么识别不同的类型的呢?这就是模版的实例化,实际就是编译器帮你完成了这个工作,是隐式的实例化自动推演模版的类型。模版的实例化发生在编译时期,所以是在编译的时候根据类型推导生成的代码

那下面来看两个问题,首先第一个,传的模版参数不明确,会报错:

template<class T>
T Add(const T& left, const T& right)
{return left + right;
}int main()
{int a = 1;double b = 1.1;Add(a, b);//报错

解决方法1:

强制转换类型,但是会丢失精度。

Add(a1,(int)d1);

 解决方法2:

使用显示实例化,其实经历了隐式类型转换:

cout<<Add<int>(a,b)<<endl;//实际b转int经过了隐式类型转换

问题2,这样的能同时存在吗:

int Add(int left, int right)
{return left + right;
}template<class T>
T Add(const T& left, const T& right)
{return left + right;
}template<class T1,class T2>
T1 Add(T1 left, T2 right)
{return left + right;
}int main()
{int a = 1;double b = 1.1;Add(a, b);
}

首先,前两个能同时存在吗?答案是可以的,因为函数名的修饰规则可能不一样。

其次,调用的时候都传的类型是int类型,前两个应该谁先调用呢?答案是会调用第一个,因为第一个在编译是就确定了地址,直接就调用了,而第二个在编译时才根据类型推导生成对应的代码,也就是先要经历模版的实例化。

那如何就想调用模版呢?使用模版的显示实例化呗,Add<int>(a,b);

那在这3个模版中,传的类型不一样,会先去调用哪一个?答案是去调用第三个,编译器是聪明的,会去调用最合适最匹配的那一个;而如果没有第三个,对应的才会调用第二个。

 

3.类模版

格式就是:

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

 

为什么要有类模版?使用typedef不行吗?

如果我们使用typedef,那第一类想要int,第二个类想要double,是不是还要再写两个类?所以就用到了类模版,但是还是调用了两个类,编译器帮你实现了:

注意类里面的构造函数new了,需要析构时delete,因为类的对象销毁会调用析构。

类模版只能显示实例化:

因为就算调用构造函数也传不到T的身上啊,并且传的值要怎么识别是T呢?

注意类名与类型的区别:
	vector<int> v1;

不加上模版参数只是类名,加上才是类型。

注意类模版最好不要声明和定义分离:

(这里指的是头文件放类模版的定义,.cpp文件放声明,分文件的声明定义分离),否则会出现链接错误(虽然有解决方式,但是还是不建议,至于为什么到模版进阶会介绍)。

如果想要类模版的声明和定义分离,目前可以放到在同一个文件里面,然后可以在类里面声明,在类外面定义(拿析构函数举例),注意类模版的定义要写在这个类的下面,不然找不到。但是还是不建议分开写,容易出错:

class Vector
{
public:Vector(int capacity=4){_pDate = new T[capacity];_size = _capacity = 0;}~Vector();private:T* _pDate;int _size;int _capacity;
};template<class T>
Vector<T>::~Vector()
{delete[] _pDate;_pDate = nullptr;_size = _capacity = 0;
}int main()
{Vector<int> v1;return 0;
}

 

总结:

本篇偏重基本的使用和注意事项,关于模版更进阶的到模版进阶篇再介绍。

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

相关文章:

  • 孝感网站设计网站建设gzzctyi
  • 做网站怎么弄模板学编程哪个机构有权威
  • 做装修网站android开发技术
  • 上海专业网站制作开发提供服务好的网站建设
  • 网站建设心得体会公司网页网站建
  • 软件网站免费周口市做网站
  • 购物网站排名 2019重庆短视频seo搜索多少钱
  • 将网站打造成网络地区广告代理
  • 网站开发和网络工程师网站设计与网页制作岗位招聘信息
  • 做长直播的房地产网站北京网站建设可选兴田德润
  • 开商城网站游戏网站开发文档
  • 企业集团网站建设长沙品质网站建设优点
  • 高校学生红色网站建设辽宁省锦州市住房与城乡建设厅网站
  • dw做网站 怎么做背景图片上海人才网官方网站
  • 网站的视频做gifgoodstore wordpress
  • 如何建设公司门户网站中铁建设集团门户网站登陆
  • 建网站需要什么资质wordpress萌主题下载地址
  • 怎么做网站的导航条机构改革 住房与城乡建设厅网站
  • 教务处网站建设方案网站空间域名多少钱
  • 时尚网站模板wordpress 页面评论 调用
  • 成品网站源码1688版本号汕头快速优化排名
  • 青岛网站建设方案服务免费seo推广计划
  • 杭州做网站哪家好网站商业授权
  • 网站备案和域名备案一样吗东莞好的网站国外站建设价格
  • 网页设计网站欣赏品牌搭建网站 官网
  • 网站没有备案是假的吗做网站的项目策划书
  • 学做网站用到哪些知识seo这个职位是干什么的
  • 企业网站建设合同 百度文库自己网站打不开
  • 专业的网站建站公司关于建设网站的需求
  • iis 怎么绑定网站二级目录合肥 网站平台建设公司