- 浏览: 118212 次
- 性别:
- 来自: 武汉
文章分类
最新评论
本例中我们定义了三个独立的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:
// ...
};
发表评论
-
在ubuntu7.10用终端编译运行c++程序
2008-02-27 15:54 993<script>function StorePag ... -
函数指针大全
2009-01-01 18:44 486<script>function StorePag ... -
问题的解决
2009-05-20 00:16 482<script>function StorePag ... -
1.2 C++程序
2009-05-20 23:16 546<script>function StorePag ... -
C++的预处理器指示符
2009-05-21 22:58 869<script>function StorePag ... -
1.4 注释
2009-05-23 00:05 530<script>function StorePag ... -
1.5 输入输出初步
2009-05-23 23:18 526<script>function StorePag ... -
2.3 基于对象的设计
2009-05-27 22:17 561<script>function StorePag ... -
基于对象的设计(2)
2009-05-28 23:48 482<script>function StorePag ... -
基于对象的设计(3)
2009-05-30 00:51 504<script>function StorePag ... -
基于对象的设计(4)
2009-05-31 02:07 603<script>function StorePag ... -
基于对象的设计(5)
2009-05-31 22:50 655<script>function StorePag ... -
面向对象的设计(1)
2009-06-02 01:44 584<script>function StorePag ... -
面向对象的设计(2)
2009-06-03 00:22 642<script>function StorePag ... -
面向对象的设计(3)
2009-06-03 22:51 575<script>function StorePag ... -
面向对象的设计(4)
2009-06-05 00:05 580<script>function StorePag ... -
面向对象的设计(5)
2009-06-05 23:17 705<script>function StorePag ... -
泛型设计(1)
2009-06-07 00:28 584<script>function StorePag ... -
泛型设计(3)
2009-06-09 01:14 576<script>function StorePag ... -
基于异常的设计(1)
2009-06-10 00:39 502异常exception 是指在运行时刻程序出现的反情形,例如数 ...
相关推荐
C++泛型编程和设计模式应用,由Addison Wesley 公司出版。
泛型程序设计,容器,STL
泛型程序设计与STL,候捷的一篇论文
C++设计新思维:泛型编程与设计模式之应用.pdf 带目录书签
泛型程序设计是继面向对象程序设计之后的又一种程序设计方法。 泛型程序设计就是让程序写得通用,能够适用于各种数据类型与数据结构,并且并不损失程序效率。面向对象与泛型程序设计这两种程序设计方法并不矛盾,...
设计新思维泛型编程与设计模式之应用 不学习泛型觉得自己没学过c++, 不学设计模式觉得自己没有学过面向对象编程
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
C++设计新思维:泛型编程与设计模式之应用
winform窗体继承泛型类时,设计器无法使用解决办法: 当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的.
C++ 设计新思维:泛型编程与设计模式之应用(简体中文).pdf c++八大金刚: 1、Essentital c++---lippman---C++之父,旁枝暂略,主攻核心,轻薄短小,初学者 2、The c++ programming language----C++之父,技术...
淮海工学院 计算机工程学院 实验报告 程序设计方法学 C++ STLJava泛型程序设计
大局观泛型程式设计与STL.zip 侯捷先生的经典好书
主要内容包括程序设计基础知识、类与对象的基本概念、继承与多态、输入输出流,以及泛型程序设计。此外,本教材还介绍了一些常用数据结构基础知识,使得读者学习本书后,能够解决一些简单的实际问题。整套教材语言...
NULL 博文链接:https://bsr1983.iteye.com/blog/793469
面向对象程序设计与泛型程序设计的概念、设计方法等问题的比较。
C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用C++ 设计新思维:泛型编程与设计模式之应用
对于框架设计者来说,便捷的代码,是很重要的一部分。 反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool<Point> pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象...
第8章 集合类与泛型程序设计第8章 集合类与泛型程序设计第8章 集合类与泛型程序设计第8章 集合类与泛型程序设计
泛型程序设计.md