区分继承和模板

考虑下面两个设计问题:

· 作为一位立志献身计算机科学的学生,你想设计一个类来表示对象的堆栈。这将需要多个不同的类,因为每个堆栈中的元素必须是同类的,即,它里面包含的必须只是同种类型的对象。例如,会有一个类来表示int的堆栈,第二个类来表示string的堆栈,第三个类来表示string的堆栈的堆栈,等等。你也许对设计一个最小的类接口(争取使类的接口完整并且最小)很感兴趣,所以会将对堆栈的操作限制在:创建堆栈,销毁堆栈,将对象压入堆栈,将对象弹出堆栈,以及检查堆栈是否为空。设计中,你不会借助标准库中的类(包括stack —-熟悉标准库),因为你渴望亲手写这些代码。重用(Reuse)是一件美事,但当你的目标是探究事情的工作原理时,那就只有挖地三尺了。 继续阅读区分继承和模板

明智地使用私有继承

使公有继承体现 “是一个” 的含义说明,C++将公有继承视为 “是一个” 的关系。它是通过这个例子来证实的:假如某个类层次结构中,Student类从Person类公有继承,为了使某个函数成功调用,编译器可以在必要时隐式地将Student转换为Person。这个例子很值得再看一遍,只是现在,公有继承换成了私有继承: 继续阅读明智地使用私有继承

决不要重新定义继承而来的缺省参数值

让我们从一开始就把问题简化。缺省参数只能作为函数的一部分而存在;另外,只有两种函数可以继承:虚函数和非虚函数。因此,重定义缺省参数值的唯一方法是重定义一个继承而来的函数。然而,重定义继承而来的非虚函数是一种错误(决不要重新定义继承而来的非虚函数),所以,我们完全可以把讨论的范围缩小为 “继承一个有缺省参数值的虚函数” 的情况。 继续阅读决不要重新定义继承而来的缺省参数值

区分接口继承和实现继承

(公有)继承的概念看起来很简单,进一步分析,会发现它由两个可分的部分组成:函数接口的继承和函数实现的继承。这两种继承类型的区别和本书简介中所讨论的函数声明和函数定义间的区别是完全一致的。 继续阅读区分接口继承和实现继承

使公有继承体现 "是一个" 的含义

在”Some Must Watch While Some Must Sleep”( W. H. Freeman and Company, 1974)一书中,William Dement讲了一个故事,故事说的是他如何让学生们记住他的课程中最重要的部分。”据说,”,他告诉他的学生,”一般的英国学生除了记得Hastings战役发生在1066年外,再也不记得其它历史。”, “如果一个小孩不记得别的历史,” Dement强调说,”也一定记得1066这个日子。”  但对于他班上的学生来说,只有很少一些话题可以引起他们的兴趣,比如,安眠药会引起失眠之类。所以他哀求他的学生,即使忘掉他在课堂上讲授的其它任何东西,也要记住那些仅有的几个重要的历史事件。而且,他在整个学期不停地对学生灌输这一基本观点。 继续阅读使公有继承体现 "是一个" 的含义

继承:类型关系

类型不仅仅说明一组对象上的约束,还说明与其他类型之间的关系。两个类型可以有共同的特性和行为,但是,一个类型可能包括比另一个类型更多的特性,也可以处理更多的消息类型不仅仅说明一组对象上的约束,还说明与其他类型之间的关系。 继续阅读继承:类型关系