首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

从设计模式下来说,平衡二叉排序树应不应该作为二叉排序树的子类

2013-01-21 
从设计模式上来说,平衡二叉排序树应不应该作为二叉排序树的子类?本帖最后由 ccnyou 于 2012-11-14 09:42:0

从设计模式上来说,平衡二叉排序树应不应该作为二叉排序树的子类?
本帖最后由 ccnyou 于 2012-11-14 09:42:06 编辑 之前有记得一个经典例子:正方形不应该作为矩形的子类,因为正方形定义中比矩形多了一个限制:长==宽
对于平衡二叉排序树来说,也多了个限制:左右子树之间的深度差的绝对值不超过 1 。
但是。。。这貌似又影响不大。。。然后我就纠结了。求指教。

[解决办法]
“因为正方形定义中比矩形多了一个限制”
就是因为这样,它才是子类啊,正方形是矩形的一种。

[解决办法]
哪本书说正方形不是矩形的?
[解决办法]
父类是子类的抽象,如果对父类操作引起子类异常,那说明父类没设计好。
你说的这个问题在effective c++里也提到了,而且书里也提到了解决的方法。既然SetWidth合适,那就不要 public继承,子类重新实现一个好了。比如矩形的SetWidth是 m_nWidth = width; 正方形需要:m_nHeight = m_nWidth = width;
很显然的一个道理,比如考试时给你一个题,说正方形宽度增加1倍,面积增加多少,你怎么回答。c++是解决实际工作的,不是教条主义。
[解决办法]
书中还提了相关不少例子,比如企鹅与鸟,学生与人。如果企鹅不能做成鸟的子类,学生不能做成人的子类,那不是c++太失败,就是没用好c++。
从抽象上来讲,父类是抽象子类公共部分。但作者的意思是,绝大多数鸟都是会飞的,只有40多种鸟不会(据里约大冒险里那只鹦鹉所说,应该是真的)。所以,正常的抽象,父类不应该有fly。如果父类里没有fly,每种鸟都要加一个。而父类有的话,绝大多数都不需要了,这样对实际情况很有帮助。对这些不会飞的鸟,不要public继承就行了。 你要仔细体会作者要说的意思,而不是盲目地拿他这个例子来教条地学c++

热点排行