《C++编程风格(修订版)》——3.1 编程风格示例:堆栈

  1. 云栖社区>
  2. 博客>
  3. 正文

《C++编程风格(修订版)》——3.1 编程风格示例:堆栈

异步社区 2017-05-02 10:25:00 浏览1376
展开阅读全文

本节书摘来自异步社区出版社《C++编程风格(修订版)》一书中的第3章,第3.1节,作者:【美】Tom Cargill,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.1 编程风格示例:堆栈

C++编程风格(修订版)
在程序清单3.1的程序中定义了一个用于处理字符堆栈的CharStack类,以及用于处理整数堆栈的IntStack类。我们将对这两个类进行分析和评价,并且判断这些类中的抽象是不是正确的、接口是否起到了相应的作用,以及类之间的继承关系是不是合适的。

有些读者在看到CharStack和IntStack时的第一反应可能是,这些类应该使用参数化类型来编写,这也是ANSI(参见Ellis和Stroustrup的著作,第341页)建议的方法。在这里我们暂时先不考虑这种做法,而是把注意力集中于对本章给出的代码进行分析,理由主要有两个:首先,在考虑使用其他方法来改写这个程序之前,我们要重点了解这个程序在使用C++的核心特性时存在什么样的问题。在这个程序中,问题能够更容易地暴露出来,而使用参数化类型则达不到这个目的;其次,在编写本书时,参数化类型并没有得到广泛的应用,它们在某些情况下并不能很好地整合到C++中。而且,如果我们还没有在如何使用参数化类型上积累足够的编程经验,那么对于参数化类型编程风格的讨论就显得为时过早。在本章的结尾部分,我们给出了使用模板来改写的程序。

程序清单3.1 最初的Stack、CharStack和IntStack
image
image
image

在上述程序中,核心的设计思想是:由于CharStack和IntStack都是堆栈,因此它们有一个共同的基类Stack。继承的层次结构如图3.1所示。

图像说明文字
image

图3.1 继承的层次结构

只有在仔细分析了这个程序之后,我们才会发现程序中的继承是不必要的,并且容易使人产生误解,因此应该去掉。事实上,在本程序中使用的公有继承将破坏堆栈的封装性。

网友评论

登录后评论
0/500
评论
异步社区
+ 关注