C++ 何时在抽象类cpp中声明受保护的字段

C++ 何时在抽象类cpp中声明受保护的字段,c++,class,abstract-class,protected,C++,Class,Abstract Class,Protected,我对抽象类的概念感到非常不舒服,如果有人能把它说得更清楚一点,我会很高兴的。我确实理解这也是一个实施和个人风格的问题,但我希望在试图解决问题时,至少有一些指导方针可以考虑 我认为抽象类只代表其派生类将继承的一种行为。因为我们不能从抽象类类型实例化对象,所以如果它们有一个c'tor或任何数据字段,它们应该处于保护模式。今天我遇到了一段代码,其中抽象类有一个公共构造函数,这让我更加困惑。关于这一点,我有几个问题: 抽象类唯一的独特之处是它们有纯虚函数?这是唯一阻止我从这个类实例化对象的东西 在什么情

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

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

  • 抽象类唯一的独特之处是它们有纯虚函数?这是唯一阻止我从这个类实例化对象的东西

  • 在什么情况下,我希望在抽象类中声明受保护的字段?何时添加受保护的构造函数有用?什么时候需要公共构造函数

  • 我看到抽象类有许多不同的用途,但有时我会想到完全不同的解决方案,大多数情况下,这种解决方案要比现在提出的解决方案复杂得多,也麻烦得多


    感谢大家的时间和关注。

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

    抽象类唯一的独特之处是它们有纯虚函数

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

    但是,即使类没有抽象方法,也可以将其声明为抽象类。也就是说,您希望阻止人们实例化它。(在这种情况下,还可以声明构造函数受保护)

    在什么情况下,我希望在抽象类中声明受保护的字段

    在同一种情况下,您可以为任何类声明受保护的字段:子类可能使用的某些属性

    何时添加受保护的构造函数有用

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

    什么时候需要公共构造函数

    对于抽象类,它不是。但这是正确的。然后子类将使用该构造函数从其自己的构造函数传递参数。在抽象类的情况下,它可以被声明为受保护的,没有任何副作用

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