gpt4 book ai didi

c++ - 有效 C++ : discouraging protected inheritance?

转载 作者:IT老高 更新时间:2023-10-28 21:47:18 27 4
gpt4 key购买 nike

我正在阅读 Scott Meyers 的 Effective C++(第三版),并在 第 32 项:确保公共(public)继承是页面上的“is-a” 中的一段中151 他发表评论(我用粗体表示):

This is true only for public inheritance. C++ will behave as I've described only if Student is publicly derived from Person. Private inheritance means something entirely different (see Item 39), and protected inheritance is something whose meaning eludes me to this day.

问题:我应该如何解释这条评论? Meyers 是否试图传达 protected 继承很少被认为有用并且应该避免?

(我已阅读问题 Difference between private, public, and protected inheritance以及 C++ FAQ Lite's private and protected inheritance section ,两者都解释了 protected 继承的含义,但并没有让我深入了解它何时或为什么有用。)

最佳答案

您想要保护的一些场景:

  1. 您有一个基类,其中包含您知道永远不想将功能公开到外部的方法,但您知道它对任何派生类都有用。

  2. 你有一个基类,它的成员应该被任何扩展该类的类在逻辑上使用,但绝不应该暴露在外面。

多亏了多重继承,您可以使用基类的继承类型,并使用现有的逻辑和实现构造一个更加多样化的类。

一个更具体的例子:

您可以创建一些遵循设计模式逻辑的抽象类,假设您有:

Observer
Subject
Factory

现在您希望将这些全部公开,因为一般来说,您可以在任何东西上使用该模式。

但是,使用 protected 继承,您可以创建一个观察者和主题的类,但只有 protected 工厂,因此工厂部分仅用于继承的类。 (只是为示例选择了随机模式)

另一个例子:

例如,假设您想从库类继承(我不鼓励这样做)。假设您想制作自己的 std::list<> 的酷扩展或“更好”shared_ptr .

您可以从基类(设计为具有公共(public)方法) protected 地派生。
这将使您可以选择使用自己的自定义方法、使用类的逻辑并将逻辑传递给任何派生类。

您或许可以改用封装,但继承遵循 IS A 的正确逻辑 (或者在这种情况下是一种 A)

关于c++ - 有效 C++ : discouraging protected inheritance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com