`

泛型设计(2)

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

本例中我们定义了三个独立的Array 类模板的实例:

Array<int> ia(array_size);

Array<double> da(array_size);

Array<char> ca(array_size);

这些实例声明就是在类模板名的后面加上一对尖括号,然后在里面写上数组的实际类型。

当我们定义类模板对象如ia、da或ca 时会发生什么事情呢?编译器必须为相关的对象

分配内存,为了做到这一点,形式模板参数被绑定到指定的实际参数类型上,对ia 来说Array

类模板通过将elemType 绑定到类型int 上产生如下的类数据成员:

// Array<int> ia(array_size);

int _size;

int *ia;

结果是一个类,它与我们前面手工编码实现的IntArray 类等价,对da 来说通过将

elemType 绑定到类型double 上,成员变为

// Array<do uble> da(array_size);

int _size;

double *ia;

类似地对ca 来说通过将elemType 绑定到类型char 上,成员变为

// Array<char> ca(array_size);

int _size;

char *ia;

类模板的成员函数会怎么样呢?不是所有的成员函数都能自动地随类模板的实例化而被

实例化。只有真正被程序使用到的成员函数才会被实例化,这一般发生在程序生成过程中的

一个独立阶段,16.8 节将详细讨论这个过程。

编译并运行程序会产主如下结果

[ 0 ] ia: 0 ca: a da: 0

[ 1 ] ia: 1 ca: b da: 1.75

[ 2 ] ia: 2 ca: c da: 3.5

[ 3 ] ia: 3 ca: d da: 5.25

模板机制也支持面向对象的程序设计,类模板可以作为基类或派生类,下面是一个带有

范围检查的Array 类模板的定义

#include <cassert>

#include "Array.h"

template <class elemType>

class ArrayRC : public Array<elemType> {

public:

ArrayRC( int sz = Array<elemType>::DefaultArraySize )

: Array< elemType >( sz ){};

ArrayRC( elemType *ia, int sz )

: Array< elemType >( ia, sz ) {}

ArrayRC( const ArrayRC &rhs )

: Array< elemType >( rhs ) {}

virtual elemType&

operator[]( int index )

{

assert( index >= 0 && index < Array<elemType>::size() );

return ia[ index ];

}

private:

// ...

};

分享到:
评论

相关推荐

    C++泛型编程和设计模式应用

    《C++泛型编程和设计模式应用》是Addison Wesley出版社推出的一本深入探讨C++编程技术的专业书籍,主要关注两个关键领域:泛型编程和设计模式。这本书旨在帮助开发者提高代码的重用性、灵活性和效率,通过利用C++...

    泛型程序设计与STL

    ### 泛型程序设计与STL:理解与应用 #### 泛型程序设计:概念与优势 泛型程序设计(Generic Programming)是一种编程范式,它允许程序员编写能够处理多种数据类型的代码,而无需为每种类型重复编写相同的逻辑。...

    C++设计新思维:泛型编程与设计模式之应用(PDF)

    《C++设计新思维:泛型编程与设计模式之应用》是一本深入探讨C++编程技术的著作,尤其强调了泛型编程和设计模式在实际软件开发中的应用。作者通过丰富的实例和深入的分析,引领读者理解并掌握C++的核心理念和高级...

    C++设计新思维:泛型编程与设计模式之应用.pdf 带目录书签

    C++设计新思维:泛型编程与设计模式之应用.pdf 带目录书签

    第十三章 泛型程序设计

    **第十三章 泛型程序设计** 泛型是Java编程语言中的一个重要特性,引入于Java 5.0,它允许在定义类、接口和方法时使用类型参数,从而提高了代码的类型安全性和重用性。泛型的主要目标是提供一种方式来限制容器对象...

    清华大学C++进阶讲义:第10章 泛型程序设计与C++标准模板库.pdf

    ### 清华大学C++进阶讲义:第10章 泛型程序设计与C++标准模板库 #### 泛型程序设计的基本概念 在计算机科学领域中,泛型程序设计是一种允许开发者编写能够处理多种数据类型的代码的技术。这种编程方式的核心在于...

    泛型程序设计

    泛型程序设计是一种高级的编程范式,它允许程序员创建可重用的代码模板,这些模板可以在多种数据类型上工作,而无需重复编写针对每种特定类型的具体实现。这种抽象方式提高了代码的灵活性和可维护性,是现代编程语言...

    泛型程序设计与C__STL简介

    泛型程序设计是继面向对象程序设计之后的又一种程序设计方法。 泛型程序设计就是让程序写得通用,能够适用于各种数据类型与数据结构,并且并不损失程序效率。面向对象与泛型程序设计这两种程序设计方法并不矛盾,...

    实验报告 程序设计方法学 C++ STLJava泛型程序设计

    通过对比泛型版本和非泛型版本的程序,我们可以看到泛型程序设计的灵活性和复用性,这使得程序更加简洁高效。同时,这种设计方法也有助于减少错误和提高代码的可维护性。 总之,本实验报告通过实际案例深入探讨了...

    C++设计新思维泛型编程与设计模式之应用

    设计新思维泛型编程与设计模式之应用 不学习泛型觉得自己没学过c++, 不学设计模式觉得自己没有学过面向对象编程

    C++设计新思维:泛型编程与设计模式之应用

    《C++设计新思维:泛型编程与设计模式之应用》这本书深入探讨了C++语言在泛型编程和设计模式中的应用,对于理解和提升C++编程能力有着重要的指导价值。以下将围绕这些主题展开详细讨论。 一、泛型编程 泛型编程是...

    泛型dao 泛型dao 泛型dao

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    面向对象程序设计与泛型程序设计

    2. 类型抽象(Type Abstraction):泛型程序设计允许开发者抽象出数据类型的共性,而不是具体类型。这样,算法可以适用于多种不同的数据类型,如整数、字符串、自定义类型等。 3. 类型安全(Type Safety):泛型...

    Cpp设计新思维_泛型编程与设计模式之应用

    2. 设计模式:设计模式是软件工程中解决常见问题的经验总结,是面向对象编程中的最佳实践。书中可能涵盖了常见的23种GOF设计模式,如工厂模式、单例模式、观察者模式等。理解并熟练运用这些模式,可以帮助开发者构建...

    大局观泛型程式设计与STL

    侯捷先生的书《大局观泛型程式设计与STL》很可能详细讲解了如何在实际项目中应用泛型编程和STL,可能包含以下内容: 1. 模板元编程:利用模板在编译时进行计算,实现高效且灵活的代码。 2. STL容器的内部实现机制:...

    设计新思维:泛型编程与设计模式之应用

    C++ 设计新思维:泛型编程与设计模式之应用(简体中文).pdf c++八大金刚: 1、Essentital c++---lippman---C++之父,旁枝暂略,主攻核心,轻薄短小,初学者 2、The c++ programming language----C++之父,技术...

    C#泛型类窗体继承设计器无法使用解决办法,解决案例Demo

    winform窗体继承泛型类时,设计器无法使用解决办法: 当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的.

Global site tag (gtag.js) - Google Analytics