公共继承很容易。
答:公共B意味着每个A都是B.在大多数编程语言中,如vb.net和objective-c,这是唯一的继承类型。
私人继承也很容易但没有意义
A:私人B意味着A由B实现。但是,这是毫无意义的,因为这意味着A应该包含B.所有权意味着更少的耦合,没有缺点。
然后我们保护了继承。
任何人都可以向我解释这到底是为了什么?有人说这是“作为一种关系”。我还不是很清楚。
是否有人有一些示例案例,其中人们以良好的模式(和良心)使用受保护的继承以实际生产用途?
答案 0 :(得分:14)
私人继承也很容易但没有意义
A:私人B意味着A由B实现。但是,这是毫无意义的,因为这意味着A应该包含B.所有权意味着更少的耦合,没有缺点。
你可能没有看到私人继承的原因并不意味着它毫无意义。 有几种情况下私人继承有其原因。你是对的,乍一看,私有继承意味着有一个像聚合一样的关系,私有继承有一个(稍微)更紧密的耦合。
支持私人继承而不是侵略的原因可能是以下一些原因:
这些原因显然是技术原因,有些人甚至会说“黑客”。但是,存在这样的原因,所以私有继承并非完全没有意义。它不是“纯粹的OO风格” - 但C ++也不是纯粹的OO语言。
一旦你理解了私有继承的原因,保护继承的原因就很简单了:
如果您有理由私下继承某些内容,和希望使这些好处(即您的类的成员或typedef)可以被派生类访问,请使用protected inheritance。显然,应该几乎不使用私有继承,并且更加保护继承。
答案 1 :(得分:5)
受保护继承的主要动机是正交性。 在所有其他上下文中,您有三种不同的访问控制: 私人,受保护和公共。为什么要继承 不同?在实践中,人们可以争辩说没有必要 或者一般用于受保护的访问。这可能是夸大其词 这种情况,但可以肯定的是,受到的保护要少得多 私人或公共。
此外,私人继承并非毫无意义,事实上, 对应于继承的原始用法。一旦到了 执行实现的基类使用虚函数 派生类必须重载,不能使用包含。