`

泛型设计(1)

阅读更多
<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>

IntArray 类为预定义的整型数组类型提供了一个有用的替代类型。如果用户希望使用一

个double 或string 类型的数组,那该怎么办呢?实现一个double 类型的数组与IntArray 类的

区别只是在其所包含的元素的类型不同,而代码本身无需改变。

C++的模板设施提供了一种机制,它能够将类成函数定义内部的类型和值参数化。

parameterizing 我们要到10.1 节才会讨论值参数,这些参数在其他方面不变的代码中

用作占位符,以后这些参数会被绑定到实际类型上,可能是内置的类型也可能是用户定

义的类型。例如在Array 类模板中,我们把数组所包含的元素的类型参数化以后,当我

们实例化instantiate 一个特定类型的实例时,如int、double 或string 类型的Array 数组,

就可以在程序中直接使用这三个实例,就好像我们已经显式地为它们编写过代码一样。现在

来看一下怎样把IntArray 类转换成Array 类模板。下面是定义

template < class elemType >

class Array {

public:

// 把元素类型参数化

explicit Array( int size = DefaultArraySize );

Array( elemType *array, int array_size );

Array( const Array &rhs );

virtual ~Array() { delete [] ia; }

bool operator==( const Array& ) const;

bool operator!=( const Array& ) const;

Array& operator=( const Array& );

int size() const { return _size; }

virtual elemType& operator[](int index){ return ia[index]; }

virtual void sort();

virtual elemType min() const;

virtual elemType max() const;

virtual int find( const elemType &value ) const;

protected:

static const int DefaultArraySize = 12;

int _size;

elemType *ia;

};

关键字template 引入模板参数由一对尖括号< > 括起来——本例中有一个参数

elemType 关键字,class 表明这个参数代表一个类型标识符,elemType 代表实际的参数名。

它在Array 类定义中出现了七次,都是作为实际类型的占位符。

在Array 类的每次实例化中,不论是实例化为int、double 或string 等等,实例化的实际

类型都将代替elemType 参数,下面的例子演示了怎样使用Array 类模板

#include <iostream>

#include "Array.h"

int main()

{

const int array_size = 4;

// elemType 变成了int

Array<int> ia(array_size);

// elemType 变成了double

Array<double> da(array_size);

// elemType变成了char

Array<char> ca(array_size);

int ix;

for ( ix = 0; ix < array_size; ++ix ) {

ia[ix] = ix;

da[ix] = ix * 1.75;

ca[ix] = ix + 'a';

}

for ( ix = 0; ix < array_size; ++ix )

cout << "[ " << ix << " ] ia: " << ia[ix]

<< "\tca: " << ca[ix]

<< "\tda: " << da[ix] << endl;

return 0;

}

分享到:
评论

相关推荐

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

    1. 泛型编程基础:介绍C++模板的基础知识,包括函数模板、类模板、模板特化、模板元编程等。 2. 标准模板库(STL):讲解STL的核心组件,如容器(vector, list, set等)、迭代器、算法和函数对象,以及如何利用它们...

    泛型程序设计与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泛型程序设计

    ##### 实验任务1:递归程序设计 - **计算最大公约数(GCD)** - 使用欧几里得算法,通过递归来实现两个整数的最大公约数计算。 - **求Fibonacci数列** - Fibonacci数列是一个经典的递归问题,每一项等于前两项之和...

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

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

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

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

    泛型dao 泛型dao 泛型dao

    1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何...

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

    面向对象程序设计与泛型程序设计是软件开发中的两种核心程序设计范式,它们在设计方法、概念、以及应用范围等方面都有所不同,但都旨在提高程序的可重用性、灵活性和可维护性。下面将详细解析这两种设计方法的知识点...

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

    1. 泛型编程:泛型编程是C++中的一种重要编程范式,它允许开发者编写不依赖于特定类型代码的能力。通过模板(templates),我们可以创建通用的函数和类,这些元素可以在多种数据类型上工作,提高了代码的重用性和...

    大局观泛型程式设计与STL

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

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

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

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

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

    Java泛型设计及其PECS原则解析

    内容概要:本文详细介绍了Java泛型的起源、特性、应用场景及限制。重点讲解了PECS(Producer extends Consumer super)原则及其在实际编码中的重要性和应用。通过具体示例阐述了泛型的引入对代码安全性的提升和...

Global site tag (gtag.js) - Google Analytics