- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我读到“具体类型很少用作进一步推导的基础”------------ Stroustrup p。 768
如何解读?这是否意味着我们应该从具有纯虚函数的基类得到派生类?但是,我看到很多代码都包含从具体类型派生的派生类。
谁能帮帮我?
最佳答案
假设您创建了一个派生类,然后用该派生类替换了程序中基类的每个实例。结果程序的行为是否相同?如果没有,那么您已经引入了一些问题。这些陷阱可能会在为继承而设计的类的情况下被考虑在内(例如,我已经看到一些为继承而设计的类实际上具有检查是否实现其他功能以允许它们甚至不存在的情况的功能,例如可能缺少查找功能的文件 I/O 类)。由于抽象类在设计时总是考虑到继承,而具体类可能不会,所以这可能是不安全的。
上面的解释讲的是生成的派生类与基类不完全兼容的情况,这是很危险的。但是,如果它 完全兼容怎么办?在这种情况下,一些潜在的 justifications使用继承(而不是组合)分崩离析。我们没有任何虚函数或 protected 成员(如果我们有,那么我假设该类是为继承而设计的)。尽管如此,在这种情况下使用继承可能是非常安全的,尽管确保它真的完全兼容是很困难的。为了安全起见,我宁愿使用组合。
编辑:
我上面所说的术语是 Liskov Substitution Principle .更简短的解释是,在大多数情况下,不是为继承而设计的类的派生类将违反 Liskov 的替换原则,或者将无法完成使用组合无法完成的任何有用的事情。
关于c++ - 为什么具体类型很少用作进一步推导的基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016608/
我有这个: const {ops} = getOplogStreamInterpreter(strm); ops.del.subscribe(v => { console.log('delete
我四处搜索,据我所知,POST 表单请求已被限制为 10MB (http://golang.org/src/net/http/request.go#L721)。 如果我要在我的 ServeHTTP 方
我是一名优秀的程序员,十分优秀!