![]() |
1
2
你的例子基本上是正确的,并且符合AV 87的精神。虽然您犯了一个错误,但实现和公共类应该是相同的“类型”(例如,两者都应该是一个通用三角形):
声称直角三角形 是一个 三角形是 错误的 和一个常见的误解。直角三角形不是三角形,除非你明确限制你可以对三角形做什么(例如,让它只读)。三角形可以有你想要的任何边长。从三角形继承的类仍然必须*像三角形那样操作。它被称为 Liskov Substitution Principle .
自从你
不能
使用
这个 类层次结构的设计 不一定遵循维恩图,也不应该遵循“日常真理”。长期的软件工程实践表明,当您坚持LSP时,可以获得合理的继承图。
是的,教科书证明了这种“直角三角形是三角形”的疯狂
都错了
如果他们不能提供满足LSP的具体设计。对于形状
|
![]() |
2
2
直角三角形是三角形,因此继承是相反的。 在您的示例中,根据编码规则,Shape必须是抽象类。因此shape只能声明纯虚拟函数,如Print()、Load()、rotate(),。。。 要从另一个实现继承(在形状层次结构旁边),不应使用公共继承。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |