c++ - 何时在抽象类 cpp 中声明 protected 字段

标签 c++ class abstract-class protected

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

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

  1. 抽象类的唯一独特之处是它们具有纯虚函数?这是唯一阻止我从此类实例化对象的原因

  2. 在什么情况下我想在抽象类中声明 protected 字段?什么时候添加 protected 构造函数有用?什么时候需要公共(public)构造函数?

我看到抽象类有很多不同的用途,但有时我会想到完全不同的解决方案,大多数时候比所提出的解决方案要复杂和麻烦得多。

感谢大家的时间和关注。

最佳答案

当您想要为某些内容提供基本实现时,请使用抽象类,将实现的某些部分留给子类,但强制执行缺少的部分。

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

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

但是,即使一个类没有抽象方法,您也可以将其声明为抽象类。那就是你想阻止人们实例化它。 (在这种情况下,您还可以声明构造函数 protected )

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

在同一场合,您将为任何类声明 protected 字段:子类可能使用的一些属性

when is it useful to add protected constructor?

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

when is a public constructor needed?

对于抽象类来说,事实并非如此。但这是有效的。然后,子类将使用该构造函数从它们自己的构造函数传递参数。对于抽象类,可以将其声明为 protected ,而不会产生任何副作用。

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

关于c++ - 何时在抽象类 cpp 中声明 protected 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57871086/

相关文章:

c++ - 在派生类中重写了哪个基类虚析构函数

c++ - 如何调用在另一个文件中找到的函数?

C++将数据读入结构数组

c++ - 在 C++ 中将 double 转换为 int 而不会出现向下舍入错误

kotlin - Kotlin 中抽象父类(super class)中的内部类?

c++ - 为什么在 C++ 中 'virtual' 和 '=0' 都需要描述一个方法是抽象的?

c++ - 尝试定义从抽象类派生的类类型的对象时出错

c++ - 使用按位运算符检查数字是正数还是负数

c# - 使用 foDicom Dicom Anonymizer 和安全配置文件

java - 快速 Java 问题 : Instantiating a given class only from another?