何时在抽象 class cpp 中声明受保护的字段
When to declare protected fields in abstract class cpp
我对抽象 classes 的概念感到非常不舒服,如果有人能把它说得更清楚一点,我会很高兴。我确实理解这也是实施和个人风格的问题,但我希望在尝试解决问题时至少有一些指导方针可供考虑。
我认为抽象 classes 仅表示其派生 classes 将继承的一种行为。因为我们不能从抽象 class 类型实例化一个对象,所以如果它们有一个 c'tor 或任何数据字段,它们应该处于保护模式。我今天遇到一段代码,其中抽象class 有一个public 构造函数,这让我更加困惑。我对此有几个问题:
abstract classes 的唯一独特之处在于它们具有纯虚函数?这是唯一阻止我从 class
实例化对象的东西
在什么情况下我想在摘要中声明受保护的字段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 语言中都是有效的。
我对抽象 classes 的概念感到非常不舒服,如果有人能把它说得更清楚一点,我会很高兴。我确实理解这也是实施和个人风格的问题,但我希望在尝试解决问题时至少有一些指导方针可供考虑。
我认为抽象 classes 仅表示其派生 classes 将继承的一种行为。因为我们不能从抽象 class 类型实例化一个对象,所以如果它们有一个 c'tor 或任何数据字段,它们应该处于保护模式。我今天遇到一段代码,其中抽象class 有一个public 构造函数,这让我更加困惑。我对此有几个问题:
abstract classes 的唯一独特之处在于它们具有纯虚函数?这是唯一阻止我从 class
实例化对象的东西
在什么情况下我想在摘要中声明受保护的字段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 语言中都是有效的。