C++编程思想学习——模版介绍

来源:互联网 发布:java aop 日志记录 编辑:程序博客网 时间:2024/06/05 06:37

1、  模版的作用

继承和组合提供了重用对象代码的方法,而C++的模版提供了重用源代码的方法。当引

入模版时,就不再使用基于对象的类的层次结构来实现容器了。模版提供了更好的机制。

2、模版在头文件中的布局

       由于可能存在多重定义的问题,一般不讲类的实现放在头文件中,但是,模版的定义很特殊,template<….>之后的任何东西都编译器当时都不为它分配存储空间,而是一直等到被一个模版实例告知。在编译器中有机制能去掉同一模版的多重定义。所以,在C++中一般讲模版的声明和定义都放入一个头文件中。

1、  模版中的常量

模版的参数并不局限于类定义的类型,可以使用编译器内置的类型。这些参数值在编译

期间变成模版的特定示例的常量,同时也可以对这些参数使用默认值。同时,在C++中,当我们遇到需要创建大量的对象,但不访问每一个变量时,我们可以在类中设置一个指向所需的类的对象的指针,但是在构造函数中并不初始化这指针,而是,在使用时才初始化,这样就不用给所有的对象都分配存储空间,所以,节约了内存。即所谓的“懒惰初始化”的方法来。

2、  模版的创建

由于,普通类到模板类之间需要修改的代码很少,即是适度透明的,所以,一般情况下先创建和调试一个普通类,然后再将其改造成模板类,一般要比直接创建一个模板类快的多。

3、  容器对于其中存放的对象的所有权

容器一般不拥有所存放对象的所有权,这样,对于对象的销毁工作也由客户程序员来做。

但我们也可以实现能够让用户选择容器对于所存放对象的所有权的容器。这平常是在容器中设置一个变量来管理容器的所有权,在容器的构造函数中给与容器的所有权设置默认值,同时也可以,增加一定的函数来读取和设置容器的所有权。

7、迭代器

       迭代器也是一个对象,它以遍历的方式访问容器中的其他对象。它提供了一种与具体的容器是如何对容器中的对象进行存取的实现无关的访问,使得对于容器中元素的访问有一个统一的标准。使得客户程序员使用迭代器访问容器中的对象时可以不考虑是哪一个容器,什么容器。所以,可以写出一个通用的对象访问程序,当容器改变了,用户程序仍可以不用改变。

       技术路线:

A、 将容器类作为迭代器类的成员对象,然后,用迭代器的成员函数对容器的访问进行封,从而提供统一接口。

B、   将容器类作为迭代器类的潜入友元类,从而,实现一个容器类必然有一个对应的迭代器来统一的访问容器。

为了安全性,可以引入一个“结束哨兵”来防止迭代器的越界。但是,在C++标准库中

为了效率,并未加入这样的代码,所以,使用时要留意。

      本文为个人学习C++编程思想时个人心得体会,所以,难免有不严谨之处,甚至有可能是错误的理解。如发现错误,或者疑问。欢迎提出讨论,共同学习、进步。

原创粉丝点击