何时在抽象 class cpp 中声明受保护的字段

When to declare protected fields in abstract class cpp

我对抽象 classes 的概念感到非常不舒服,如果有人能把它说得更清楚一点,我会很高兴。我确实理解这也是实施和个人风格的问题,但我希望在尝试解决问题时至少有一些指导方针可供考虑。

我认为抽象 classes 仅表示其派生 classes 将继承的一种行为。因为我们不能从抽象 class 类型实例化一个对象,所以如果它们有一个 c'tor 或任何数据字段,它们应该处于保护模式。我今天遇到一段代码,其中抽象class 有一个public 构造函数,这让我更加困惑。我对此有几个问题:

  1. abstract classes 的唯一独特之处在于它们具有纯虚函数?这是唯一阻止我从 class

  2. 实例化对象的东西
  3. 在什么情况下我想在摘要中声明受保护的字段class?什么时候添加受保护的构造函数有用?什么时候需要 public 构造函数?

我看到抽象 classes 的许多不同用途,但有时我会想到完全不同的解决方案,大多数时候它比所提供的要复杂和繁琐得多。

感谢大家的时间和关注。

当您想为某物提供基本实现时使用抽象 classes,将实现的某些部分留给 child classes,但必须强制执行实现缺少的点点滴滴。

the only unique thing about abstract classes is that they have pure virtual functions?

A class 是抽象的,因为它的某些部分(方法)也是抽象的(没有实现)。

但是,您可以将 class 声明为抽象的,即使它没有抽象方法。那就是你想阻止人们实例化它。 (在那种情况下你也可以声明构造函数受保护)

on what occasions do I want to declare protected fields in an abstract class?

在同一场合,您将为任何 class 声明受保护的字段:child classes

可能使用的某些属性

when is it useful to add protected constructor?

当您想要阻止实例化 class 的 objects 时。如果 class 是抽象的,则没有额外的好处,因为它无论如何都不会被实例化。

when is a public constructor needed?

对于摘要 classes,它不是。但这是有效的。然后 child classes 将使用该构造函数从它们自己的构造函数传递参数。在抽象 classes 的情况下,它可以被声明为受保护而没有任何副作用。

请注意,我不是 C++ 专家,但这些问题在任何 OOP 语言中都是有效的。