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

移动网站建设哪家快慈溪建设银行支行网站

移动网站建设哪家快,慈溪建设银行支行网站,政务版企业微信app下载安装,一家专业做家谱的网站转载#xff1a;http://www.cnblogs.com/yyxt/p/5157517.html 前面的几篇博文介绍了模板的基础知识#xff0c;并且也深入的讲解了模板的特性。接下来的博文中#xff0c;将会针对模板与设计进行相关的介绍。 ------------------------------------------------------------…转载http://www.cnblogs.com/yyxt/p/5157517.html 前面的几篇博文介绍了模板的基础知识并且也深入的讲解了模板的特性。接下来的博文中将会针对模板与设计进行相关的介绍。 ------------------------------------------------------------------------------------------------------------ 与传统的语言构造相比模板的不同之处在于它允许我们在代码中对类型和函数进行参数化。把1局部特化和2递归实例化组合起来将会产生强大威力。接下来的几篇博文我们通过下面的一些设计技术来展示这些强大威力 1泛型编程 2trait 3policy class  4metaprogramming 5表达式模板 ------------------------------------------------------------------------------------------------------------ 第14章 模板的多态威力 多态是一种能够令单一的泛型标记关联不同特定行为的能力。对面向对象的程序设计范例而言多态可以说是一块基石。在C中这块基石主要是通过继承和虚函数来实现的。由于这两个机制继承和虚函数都是至少一部分在运行期进行处理的因此我们把这种多态称为动多态我们平常所谈论的C多态指的就是这种动多态。然而模板也允许我们使用单一的泛型标记来关联不同的特定行为但这种借助于模板的关联是在编译期进行处理的因此我们把这种借助于模板的多态称为静多态从而和上面的动多态区分开来。 ------------------------------------------------------------------------------------------------------------ 14.1 动多态 使用继承和虚函数在这种情况下多态的设计思想主要在于对于几个相关对象的类型确定它们之间的一个共同功能集然后在基类中把这些共同的功能声明为多个虚函数接口。每个具体类都派生自基类生成了具体对象之后客户端代码就可以通过指向基类的引用或指针来操作这些对象并且能够通过这些引用或者指针来实现虚函数的调度机制。也就是说利用一个指向基类子对象的指针或者引用来调用虚成员函数实际上将可以调用指针或者引用实际上所代表的具体类对象的相应成员。这种动多态是C程序设计里面最常见的这里不过多的阐述。 14.2 静多态 模板也能够被用于实现多态。如下例子 // poly/statichier.hpp #include coord.hpp// 具体的几何对象类Circle // - 并没有派生自任何其他的类 class Circle {public:void draw() const;Coord center_of_gravity() const;... };// 具体的几何对象类Line // - 并没有派生自任何其他的类 class Line {public:void draw() const;Coord center_of_gravity() const;... }; .... 现在使用这些类的应用程序看起来如下所示 // poly/staticpoly.cpp #include statichier.hpp #include vector// 画出任意GeoObj // method2 template typename GeoObj void myDraw(GeoObj const obj) // GeoObj是模板参数 {obj.draw(); // 根据对象的类型调用相应的draw() } ......int main() {Line l;Circle c;myDraw(l); // myDrawLine(GeoObj) Line::draw()myDraw(c); // myDrawCircle(GeoObj) Circle::draw() }// method1:如果使用动多态myDraw函数会是如下形式 void myDraw(GeoObj const obj) // GeoObj是一个抽象基类 {obj.draw(); } 通过比较myDraw()的这两个实现我们可以看出主要的区别在于method2的GeoObj的规范是模板参数而不是一个公共基类。然而在这个现象的背后还存在更多本质的差别。例如使用动多态method1我们在运行期只具有一个myDraw()函数而如果使用模板我们则可能具有多个不同的函数诸如myDrawLine()和myDrawCircle()。 14.3 动多态和静多态 我们来对多态进行分类并对这两种多态进行比较。 14.3.1 术语 动多态和静多态为不同的C编程idioms提供了支持 1通过继承实现的多态是绑定的和动态的 1. 绑定的含义是对于参与多态行为的类型它们具有多态行为的接口是在公共基类的设计中就预先确定的有时候也把绑定这个概念称为入侵的或者插入的。 2. 多态的含义是接口的绑定是在运行期动态完成的。 2通过模板实现的多态是非绑定的和静态的 1. 非绑定的含义是对于参与多态行为的类型它们的接口是没有预先确定的有时也称这个概念为非入侵的或者非插入的。 2. 静态的含义是接口的绑定是在编译期静态完成的。 14.3.2 优点和缺点 1C的动多态具有下列优点 1. 能够优雅地处理异类集合 2. 可执行代码的大小通常比较小因为只需要一个多态函数但对于静多态而言为了处理不同的类型必须生成多个不同的模板实例 3. 可以对代码进行完全编译因此并不需要发布实现源码但是分布模板库通常都需要同时发布模板实现的源代码 2另一方面C静多态则具有下列优点 1. 可以很容易地实现内建类型的集合。更广义地说并不需要通过公共基类来表达接口的共同性 2. 所生成的代码效率通常都比较高因为并不存在通过指针的间接调用而且可以进行演绎的非虚拟函数具有更多的内联机会 3. 对于只提供部分接口的具体类型如果在应用程序中只是使用到这一部分接口那么也可以使用该具体类型而不必在乎该类型是否提供其他部分的接口。 通常而言与动多态相比静多态被认为具有更好的类型安全性因为静多态在编译期会对所有的绑定操作进行检查。例如假设我们尝试把一个错误类型的对象插入到一个容器中如果这个容器是根据模板实例化而生产的话那么几乎不会有危险因为在编译期就可以检查出这个错误但如果该容器所期望的元素是指向公共基类的指针那么这些指针最后很有可能会指向不同类型的完整对象而这就有可能会插入错误类型的对象。 在实际应用中对于看起来相同的接口如果在它们背后隐藏着一些语义假设的话那么模板实例化体(静多态)有时也会导致一些问题。例如对于一个假设具有关联运算符 的模板如果基于一个没有关联该运算符的类型来实例化这个模板那么就会出现一些问题。然而基于继承体系的多态则很少会出现这种语义非匹配的问题因为公共接口规范已经在基类中更加显式地指定了。 14.3.3 组合这两种多态 显然你可以组合这两种形式的多态。例如你可以从一个公共基类派生出不同种类的几何对象类从而能够处理属于异类集合的不同几何对象。另一方面你仍然可以使用模板来编写针对某种几何对象的代码。 在后面的博文xxxx中将进一步阐述继承和模板的组合。在第16章中我们将看到如何对成员函数的虚拟性进行参数化当使用基于继承的奇异递归模板模式的时候静多态要牺牲哪些额外的灵活性。 14.4 新形式的设计模板 这种新形式的静多态带来了实现设计模式的新方法。例如以在C程序设计中扮演重要角色的桥模式为例。我们使用桥模式的目的是为了能够在同一接口的多个不同实例中进行切换。我们通常可以使用一个指针来引用具体的实现然后把所有的调用都委托给这个包含具体实现的类从而达到我们的目的见图14.3   然而如果实现的类型在编译期就已经是确定的那么我们就可以借助于模板的方法来实现桥模式见图14.4。这将可以带来更好的类型安全性并且也能避免使用指针而且还能带来更高的效率。   14.5 泛型程序设计 到目前为止在C泛型程序设计领域中最显著的贡献就是STLStandard Template Library它后来被采纳并引入到C标准库中。STL借助于迭代器对操作进行了参数化从而避免了操作定义在数量上的过度膨胀。在此你并不需要为每个容器都实现每一个操作只需要实现某个算法一次就可以把该算法应用到每个容器中。换句话说泛型程序设计的“粘合剂”就是由容器提供的并且能被算法所使用的迭代器。迭代器之所以能够肩负这样的任务是由于容器为迭代器提供了一些特定的接口而算法所使用的正是这些接口。我们通常也把每个这样的接口称为一个concept即约束它说明一个模板即容器如果要并入这个框架即STL就必须履行或者实现这些约束也即符合STL框架标准。 从原则上讲也可以使用动多态来实现这些类似于STL的功能。然而用动多态实现的功能使用起来肯定会很受限制因为与迭代器的概念相比动多态的虚函数调用机制将会是一种重量级的实现机制这就会对效率产生很大的影响。譬如增加一层基于虚函数的接口层通常就会影响操作的效率而且这种影响的程度可能是几个数量级的甚至更加严重。 事实上泛型程序设计是相当实用的因为它所依赖的是静多态而静多态会要求在编译期对接口进行解析。另一方面这种要求即对接口在编译期进行解析还会带来一些与面向对象程序设计原则截然不同的新设计原则。 分类: C Template
http://wiki.neutronadmin.com/news/432214/

相关文章:

  • app开发 上传wordpress百度seo排名优化助手
  • 杭州网站推广优化公司岳阳网站建设哪家好
  • 平潭城乡住房建设厅网站灯具网站怎么做
  • 衡水制作网站外贸客户开发的渠道有哪些
  • 网站开发调研问卷软件下载网站整站源码
  • 网站建设 有道翻译购物网站中加减数目的怎么做
  • 网站制作费用低品牌营销策划过程
  • 义乌设计网站湘潭网站建设 技精磐石网络
  • 开源网站程序徐州网站营销
  • 昆明网站设计制造访客可以用微信回复wordpress
  • 帮中介做网站赚钱吗北京工程网站建设
  • 叮当网站做app广州车陂网站建设中心
  • 建设银行投资网站网站开发程序员
  • php做企业网站管理系统七牛镜像存储wordpress
  • 怎样提升网站权重网站关键词指数查询工具
  • 北京网站建设新鸿广告公司宣传册设计
  • 廊坊网站建设佛山厂商百度手机
  • 用织梦系统做的2个网站要把它都上传到服务器上吗千锋教育学费
  • 做结婚视频储存网站制作网页比较方便的软件
  • 网上交易平台网站建设公司企业管理培训课程ppt
  • 学校网站平台建设下载中心官方网站建设银行
  • 网站建设的 几点不良网站浏览窗口
  • h5做网站什么软件百度云虚拟主机上传wordpress
  • 商城网站后续费用做企业网站 签合同要注意什么
  • 门户网站建设工作总结重庆企业网站营销设计
  • 怎么验证网站收录优美图片
  • 长沙 直播网站建设循化县wap网站建设公司
  • 湖州 外贸网站建设oa管理系统报价
  • 各类手机网站建设安丘网站开发
  • 丽江网站建设 莱芜天心区网站建设