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

西宁微网站建设多少钱上海外贸新三样出口超2400亿元

西宁微网站建设多少钱,上海外贸新三样出口超2400亿元,大作设计网站官网登录,类似链家网站建设方案C模板入门 一、泛型编程 二、函数模板1. 函数模板的概念2. 函数模板格式3. 函数模板的原理4. 函数模板的实例化5. 模板参数的匹配原则 三、类模板 一、泛型编程 假设我们想实现一个交换函数#xff0c;并且支持不同类型的参数实现#xff0c;我们可以用 typedef 将类型进行重… C模板入门 一、泛型编程 二、函数模板1. 函数模板的概念2. 函数模板格式3. 函数模板的原理4. 函数模板的实例化5. 模板参数的匹配原则 三、类模板 一、泛型编程 假设我们想实现一个交换函数并且支持不同类型的参数实现我们可以用 typedef 将类型进行重命名例如以下代码 // 将 int 起别名为 DataTypetypedef int DataType;void Swap(DataType x, DataType y){DataType tmp x;x y;y tmp;}int main(){DataType x 0, y 6;Swap(x, y);return 0;}这样我们每次需要更换类型的时候只需要更改 int 为其他类型即可 以上是一种方法还有一种方法可以使用函数重载实现例如 void Swap(int left, int right){int temp left;left right;right temp;}void Swap(double left, double right){double temp left;left right;right temp;}void Swap(char left, char right){char temp left;left right;right temp;}以上两种方法虽然可以实现通用的交换函数但是有以下几个不好的地方 重载的函数仅仅是类型不同代码复用率比较低只要有新类型出现时就需要用户自己增加对应的函数或修改类型。代码的可维护性比较低一个出错可能所有的重载均出错。 那能否告诉编译器一个模板让编译器根据不同的类型利用该模板来生成代码呢答案是可以的在这里就需要引入泛型编程泛型编程 编写与类型无关的通用代码是代码复用的一种手段。模板是泛型编程的基础。 模板分为函数模板和类模板。 二、函数模板 1. 函数模板的概念 函数模板代表了一个函数家族该函数模板与类型无关在使用时被参数化根据实参类型产生函数的特定类型版本。 2. 函数模板格式 在定义函数模板之前我们需要引入一个关键字template它是定义模板的关键字 使用格式templatetypename T1, typename T2,......,typename Tn在 template 关键字后面要用尖括号括住模板参数模板参数的数量可以是任意的但是需要使用 typename 关键字来定义模板参数也可以使用 class(切记不能使用struct代替class)。 例如交换函数的函数模板 templatetypename Tvoid Swap(T t1, T t2){T tmp t1;t1 t2;t2 tmp;}3. 函数模板的原理 函数模板是一个蓝图它本身并不是函数是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。 例如下图就很好地体现了这一个过程 在编译器编译阶段对于模板函数的使用编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。 比如当用 double 类型使用函数模板时编译器通过对实参类型的推演将 T 确定为 double 类型然后产生一份专门处理 double 类型的代码对于字符类型也是如此即编译器用模板实例化生成对应的Swap 函数。 4. 函数模板的实例化 用不同类型的参数使用函数模板时称为函数模板的实例化。模板参数实例化分为隐式实例化和显式实例化。 隐式实例化 让编译器根据实参推演模板参数的实际类型例如以下这个 Add 的函数模板实现两个数的相加 templateclass TT Add(T a, T b){return a b;}int main(){int a 10, b 20;double c 1.11, d 2.22;cout sum Add(a, b) endl;cout sum Add(c, d) endl;return 0;}上面的两个调用实例化都没有问题编译器进行了隐式实例化运行的结果如下 但是如果这样调用会编译通过吗Add(a, d)答案是不行的通过实参 a 将 T 推演为 int通过实参 d 将 T 推演为 double 类型但模板参数列表中只有一个 T 编译器无法确定此处到底该将 T 确定为 int 或者 double 类型而报错。 所以此时有两种解决方法 用户自己来强制转化使用显式实例化 如果自己来强制转化就可以使用以下方法 int main(){int a 10, b 20;double c 1.11, d 2.22;cout sum Add((double)a, d) endl;cout sum Add(a, (int)d) endl;return 0;}我们可以在调用 Add 函数时将 a 强转为 double或者将 d 强转为 int 。 显式实例化 在函数名后的中指定模板参数的实际类型。 例如上面的问题中我们使用显式实例化解决代码如下 int main(){int a 10, b 20;double c 1.11, d 2.22;cout sum Add(a, b) endl;cout sum Add(c, d) endl;cout sum Adddouble(a, d) endl;cout sum Addint(a, d) endl;return 0;}我们在函数名的后面用尖括号指定了模板参数的类型这就是显式实例化。 注意如果类型不匹配编译器会尝试进行隐式类型转换如果无法转换成功编译器将会报错。 5. 模板参数的匹配原则 对于非模板函数和同名函数模板如果其他条件都相同在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数 那么将选择模板。 例如以下两段代码 // 专门处理int的加法函数int Add(int a, int b){cout int Add(int a, int b) endl;return a b;}// 通用加法函数templateclass TT Add(T a, T b){cout T Add(T a, T b) endl;return a b;}int main(){// 与非函数模板类型完全匹配不需要函数模板实例化Add(1, 2); // 模板函数可以生成更加匹配的版本编译器根据实参生成更加匹配的 Add 函数Addint(1, 2); return 0;}三、类模板 假设我们我们需要实现一个通用的栈我们可以使用 typedef 关键字对类型起别名每次需要改变类型的时候只需要在 typedef 更改即可例如以下的 Stack 类 typedef int DataType;class Stack{public:Stack(size_t capacity 4){_array new DataType[capacity];_capacity capacity;_size 0;}~Stack(){cout ~Stack() endl;delete[] _array;_array nullptr;_size _capacity 0;}private:// 内置类型DataType* _array;int _capacity;int _size;};虽然以上的 Stack 类不同的类型只需要改变 typedef 的类型即可但是如果我同时需要两个栈一个栈的参数是 int 另一个栈的参数是 double 呢上面的方法就不能很好地满足了所以我们引入类模板。 类模板的使用如下以 Stack 类为例 templateclass Tclass Stack{public:Stack(size_t capacity 4){_array new T[capacity];_capacity capacity;_size 0;}~Stack(){delete[] _array;_array nullptr;_size _capacity 0;}private:T* _array;int _capacity;int _size;};实例化对象如下 int main(){Stackint st1;Stackdouble st2;return 0;}注意Stack 是类名Stackint 和 Stackdouble 才是类型template 的作用范围是 Stack 这个类。 这样我们就同时实现了两个栈一个栈存放的参数是 int另外一个存放的是 double。
http://www.hkea.cn/news/14264684/

相关文章:

  • 哪个网络公司做网站好点适合设计师的网站编辑软件
  • 网站推广公司 优帮云灰色关键词排名代做
  • 紫搜做网站简单大气网站欣赏
  • 9i网站建设建设项目环保验收公示网站
  • c 在线视频网站开发临时域名用于网站调试
  • 文字短链接生成器百度搜索引擎优化方式
  • c 能用来做网站中国科技成就按时间顺序
  • 做彩票网站网址福州公司网站开发方案
  • 邵东建设公司网站哪家好广州竞价外包
  • 北京网站优化电销客户资源购买
  • 贵州省建设厅网站查辽宁建设工程信息网 招标文件
  • 建设个普通的网站得多少钱wordpress 采集站
  • 四川网站建设博客科技侠智能锁
  • 手机浏览器 网站开发外贸页面网站制作
  • 免费全能网站空间购物网站后台管理系统模板
  • 响应式网站 有哪些弊端微网站建设费用
  • 淘宝客推广网站建设宠物app页面设计
  • 北京临沂商会网站建设wordpress 升级 xampp 无法定义根目录
  • 网站开发的大致流程自己网站做电子签章有效么
  • 自己动手建设网站备案期间网站能用吗
  • 网站建设什么意思wordpress源码安装教程
  • 德州企业认证网站建设番禺网站优化
  • 线上营销方式6种西安网站seo工作室
  • 无锡优化网站价格陕西建设网三类人员
  • 宜昌高端网站建设免费网站域名查询
  • 网站建设导航分哪几类杭州开发网站
  • 局域网网站架设软件简历制作哪里好
  • 盐城网站建设0515icp广州建站推广
  • 四川省成都市建设厅官网网站品牌词如何优化
  • 做外掛网站空间店面设计布局