何时在抽象类 cpp 中声明受保护字段
Posted
技术标签:
【中文标题】何时在抽象类 cpp 中声明受保护字段【英文标题】:When to declare protected fields in abstract class cpp 【发布时间】:2020-01-12 05:29:06 【问题描述】:我对抽象类的概念感到非常不舒服,如果有人能把它说得更清楚一点,我会很高兴。我确实理解这也是实施和个人风格的问题,但我希望在尝试解决问题时至少有一些指导方针可供考虑。
我认为抽象类只代表其派生类将继承的一种行为。因为我们不能从抽象类类型实例化一个对象,所以如果它们有一个 c'tor 或任何数据字段,它们应该处于保护模式。今天遇到一段代码,其中抽象类有一个公共构造函数,这让我更加困惑。我对此有几个问题:
抽象类的唯一独特之处是它们具有纯虚函数?这是阻止我从此类实例化对象的唯一原因
在什么情况下我想在抽象类中声明受保护的字段?什么时候添加受保护的构造函数有用?什么时候需要公共构造函数?
我看到了抽象类的许多不同用途,但有时我会想到完全不同的解决方案,大多数时候这比所提出的要复杂和麻烦。
感谢大家的时间和关注。
【问题讨论】:
【参考方案1】:当您想为某些东西提供基本实现时,请使用抽象类,将实现的某些部分留给子类,但必须强制实现缺少的部分。
抽象类唯一的独特之处是它们具有纯虚函数?
一个类是抽象的,因为它的某些部分(方法)也是抽象的(没有实现)。
但是,即使类没有抽象方法,您也可以将其声明为抽象类。那就是你想阻止人们实例化它。 (在这种情况下,您也可以声明构造函数受保护)
在什么情况下我想在抽象类中声明受保护的字段?
在同一场合,您会为任何类声明受保护的字段:一些可能被子类使用的属性
什么时候添加受保护的构造函数有用?
当您想防止类的对象实例化时。如果类是抽象的,则没有额外的好处,因为它无论如何都不是无形的。
什么时候需要公共构造函数?
对于抽象类,它不是。但这是有效的。然后子类将使用该构造函数从它们自己的构造函数传递参数。在抽象类的情况下,它可以被声明为受保护而没有任何副作用。
请注意,我不是 C++ 专家,但这些问题适用于任何 OOP 语言。
【讨论】:
以上是关于何时在抽象类 cpp 中声明受保护字段的主要内容,如果未能解决你的问题,请参考以下文章