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

管城郑州网站建设优速网站建设优化seo

管城郑州网站建设,优速网站建设优化seo,大型网站开发合同,网站自制app系列文章目录 14.4.4 数组模板示例和非类型参数 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录14.4.4 数组模板示例和非类型参数 14.4.4 数组模板示例和非类型参数 模板常用作容器类,这…

系列文章目录

` 14.4.4 数组模板示例和非类型参数


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 14.4.4 数组模板示例和非类型参数


14.4.4 数组模板示例和非类型参数

模板常用作容器类,这是因为类型参数的概念非常适合于将相同的存储方案用于不同的类型。确实,为容器类提供可重用代码是引入模板的主要动机,所以我们来看看另一个例子,深入探讨模板设计和使用的其他几个方面。具体地说,将探讨一些非类型(或表达式)参数以及如何使用数组来处理继承族。首先介绍一个允许指定数组大小的简单数组模板。一种方法是在类中使用动态数组和构造函数参数来提供元素数目,最后一个版本的 Stack模板采用的就是这种方法。另一种方法是使用模板参数来提供常规数组的大小,C++11新增的模板 array 就是这样做的。程序清单 14.17 演示了如何做。
程序清单 14.17arraytp.h

//arraytp.h  -- Array Template
#ifndef ARRAYTP_H_
#define ARRAYTP_H_#include <iostream>
#include <cstdlib>template <class T, int n>
class ArrayTP
{
private:T ar[n];
public:ArrayTP() {};explicit ArrayTP(const T & v);virtual T & operator[](int i);virtual T operator[](int i) const;
};template <class T, int n>
ArrayTP<T,n>::ArrayTP(const T & v)
{for (int i = 0; i < n; i++)ar[i] = v;
}template <class T, int n>
T & ArrayTP<T,n>::operator[](int i)
{if (i < 0 || i >= n){std::cerr << "Error in array limits: " << i<< " is out of range\n";std::exit(EXIT_FAILURE);}return ar[i];
}template <class T, int n>
T ArrayTP<T,n>::operator[](int i) const
{if (i < 0 || i >= n){std::cerr << "Error in array limits: " << i<< " is out of range\n";std::exit(EXIT_FAILURE);}return ar[i]; 
}#endif

请注意程序清单 14.17中的模板头:

template <class T,int n>

关键字 class(或在这种上下文中等价的关键字 typename)指出T为类型参数,int指出n的类型为 int。这种参数(指定特殊的类型而不是用作泛型名)称为非类型(non-type)或表达式(expression)参数。假设有下面的声明:

ArrayTP<double,12>eggweights;

这将导致编译器定义名为 ArrayTP<double,12>的类,并创建一个类型为ArrayTP<double,12>的eggweight对象。定义类时,编译器将使用double 替换 T,使用12替换 n。
表达式参数有一些限制。表达式参数可以是整型、枚举、引用或指针。因此,doublem是不合法的,但 doublemm 和 doublepm 是合法的。另外,模板代码不能修改参数的值,也不能使用参数的地址。所以,在 ArayTP模板中不能使用诸如 n++和&n等表达式。另外,实例化模板时,用作表达式参数的值必须
是常量表达式。与Stack中使用的构造函数方法相比,这种改变数组大小的方法有一个优点。构造函数方法使用的是通过 new 和 delete 管理的堆内存,而表达式参数方法使用的是为自动变量维护的内存栈。这样,执行速度将更快,尤其是在使用了很多小型数组时。
表达式参数方法的主要缺点是,每种数组大小都将生成自己的模板。也就是说,下面的声明将生成两个独立的类声明:

ArrayTP<double,12>eggweights;ArrayTP<double,13>donuts;

但下面的声明只生成一个类声明,并将数组大小信息传递给类的构造函数:

Stack<int>eggs(12);
Stack<int>dunkers(13);

另一个区别是,构造函数方法更通用,这是因为数组大小是作为类成员(而不是硬编码)存储在定义中的。这样可以将一种尺寸的数组赋给另一种尺寸的数组,也可以创建允许数组大小可变的类。


http://www.hkea.cn/news/142537/

相关文章:

  • 成都可以做网站的公司百度手机助手最新版下载
  • 赤峰网站建设招聘市场营销互联网营销
  • 网站开发后端需要哪些技术友情链接检索数据分析
  • 金华竞价排名 金华企业网站建设常见的网络营销平台有哪些
  • p2p网站开发关键词seo是什么意思
  • 自己免费怎么制作网站合肥今天的最新消息
  • 今日头条新闻10条简短seo网络优化招聘信息
  • 赣州人才网官方网站关键词seo优化软件
  • cad做兼职区哪个网站郑州网络营销公司排名
  • 宁夏银川做网站的公司有哪些网络营销分类
  • 换物网站为什么做不起来中国免费广告网
  • 可以显示一张图片的网站怎么搭建搜索引擎优化策略
  • 精品课程网站建设论文今天的新闻最新消息
  • 检查网站收录问题蚌埠seo外包
  • 建站展示网站优化网
  • 秦皇岛网站建设价格深圳seo公司
  • 广告型网站建设广州营销网站建设靠谱
  • 包头学做网站平台开发
  • 个人如何做微商城网站指数分布的分布函数
  • 北京网站设计哪家公司好建站工具
  • 深圳外贸网络推广seo诊断书案例
  • Java做网站的基本框架优化关键词规则
  • 网上手机商城网站建设直通车推广计划方案
  • 网站框架是谁做做个电商平台要多少钱
  • 网站开发建设书籍推荐b2b外贸平台
  • 网站首页的布局设计进行优化
  • 无锡做家纺公司网站如何建网站不花钱
  • bootstrap制作的网站页面优化网站seo
  • 海口网站建设优化班级优化大师官网登录
  • 连接品硕网线做怎么弹网站百度地图推广电话