社区
设计模式
帖子详情
从设计模式上来说,平衡二叉排序树应不应该作为二叉排序树的子类?
ccnyou
2012-11-14 09:34:10
之前有记得一个经典例子:正方形不应该作为矩形的子类,因为正方形定义中比矩形多了一个限制:长==宽
对于平衡二叉排序树来说,也多了个限制:左右子树之间的深度差的绝对值不超过 1 。
但是。。。这貌似又影响不大。。。然后我就纠结了。求指教。
...全文
250
6
打赏
收藏
从设计模式上来说,平衡二叉排序树应不应该作为二叉排序树的子类?
之前有记得一个经典例子:正方形不应该作为矩形的子类,因为正方形定义中比矩形多了一个限制:长==宽 对于平衡二叉排序树来说,也多了个限制:左右子树之间的深度差的绝对值不超过 1 。 但是。。。这貌似又影响不大。。。然后我就纠结了。求指教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ccnyou
2012-11-20
打赏
举报
回复
生不能做成人的子类?为什么呢?
sxcong
2012-11-19
打赏
举报
回复
书中还提了相关不少例子,比如企鹅与鸟,学生与人。如果企鹅不能做成鸟的子类,学生不能做成人的子类,那不是c++太失败,就是没用好c++。 从抽象上来讲,父类是抽象子类公共部分。但作者的意思是,绝大多数鸟都是会飞的,只有40多种鸟不会(据里约大冒险里那只鹦鹉所说,应该是真的)。所以,正常的抽象,父类不应该有fly。如果父类里没有fly,每种鸟都要加一个。而父类有的话,绝大多数都不需要了,这样对实际情况很有帮助。对这些不会飞的鸟,不要public继承就行了。 你要仔细体会作者要说的意思,而不是盲目地拿他这个例子来教条地学c++
sxcong
2012-11-19
打赏
举报
回复
父类是子类的抽象,如果对父类操作引起子类异常,那说明父类没设计好。 你说的这个问题在effective c++里也提到了,而且书里也提到了解决的方法。既然SetWidth合适,那就不要 public继承,子类重新实现一个好了。比如矩形的SetWidth是 m_nWidth = width; 正方形需要:m_nHeight = m_nWidth = width; 很显然的一个道理,比如考试时给你一个题,说正方形宽度增加1倍,面积增加多少,你怎么回答。c++是解决实际工作的,不是教条主义。
ccnyou
2012-11-14
打赏
举报
回复
1楼的说法~不同意。这是有问题的,从属性上来说正方形是矩形,但是从操作来说,不可行。明显,矩形如果有个SetWidth方法,如果被正方形继承了,就乱套了,行为根本无法预测,甚至容易引发隐晦的异常 书叫做《模式的乐趣》
sxcong
2012-11-14
打赏
举报
回复
哪本书说正方形不是矩形的?
sxcong
2012-11-14
打赏
举报
回复
“因为正方形定义中比矩形多了一个限制” 就是因为这样,它才是子类啊,正方形是矩形的一种。
数据结构(四)——二叉树、堆排序以及二叉树的应用(java代码实现)
二叉树 二叉树的概念 树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树 二叉树的子节点分为左节点和右节点 如果该二叉树的所有叶子节点都在最后一层,并且节点总数= 2^n-1,n为层数,则我们称为满二叉树 如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树 二叉树的前中后序遍历 前序遍历:先输出父节点,再遍历左子树和右子树 中序遍历:先遍历左子树,再输出父节点,再遍历右子树 后序
C++面经之C++
1.C和C++的区别 在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? C语言怎么处理返回值 C++的类中哪些成员会被算入sizeof中 2.C/C++较Java有性能优势,为什么? 3.C++语言特性:构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏 Static_cast<>,dynamic_cast<...
目标检测4种罗非鱼鱼病数据集9595张YOLO-VOC格式.zip
数据集格式:VOC格式+YOLO格式 压缩包内含:3个文件夹,分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计:9595 Annotations文件夹中xml文件总计:9595 labels文件夹中txt文件总计:9595 标签种类数:4 标签名称:["Columnaris","Motile hydrophilia","Streptococcosis","Tilapia Lake Virus"] 每个标签的框数(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准): Columnaris 框数 = 3729(柱状病) Motile hydrophilia 框数 = 3310(溃烂病) Streptococcosis 框数 = 2828(链球菌病) Tilapia Lake Virus 框数 = 3773(罗非鱼湖病毒) 总框数:13640 图片清晰度(分辨率:像素):清晰或一般 图片是否增强:是 标签形状:矩形框,用于目标检测识别 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注
政府科技部门如何优化科技项目评审流程?.docx
政府科技部门如何优化科技项目评审流程?
设计模式
3,408
社区成员
1,071
社区内容
发帖
与我相关
我的任务
设计模式
专题开发/技术/项目 设计模式
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 设计模式
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章