【问题标题】:C++ standard way to create "Abstract Class" (Pure Virtual Class) [duplicate]创建“抽象类”(纯虚拟类)的C++标准方法[重复]
【发布时间】:2016-01-25 15:06:54
【问题描述】:

我将从我们大多数人已经知道的开始:

如果我希望我的类是抽象的,我必须将它的至少一个方法定义为“纯虚拟”,例如,这里的方法someFunction() 被定义为“纯虚拟”,因为它定义为virtual 关键字并分配有0

class SomeClass {
    virtual void someFunction() = 0;
};

我的问题是,当我想要一个 “抽象类” 时,即一个无法实例化的类(如“纯虚拟”类),但我想实现它的所有方法。有什么标准的方法吗?

我目前的解决方法很丑 - 我只是定义了另一个虚拟纯虚拟方法:

class UglyWorkaround {
    public:
        virtual void doAction1();
        virtual void doAction2();

        // My ugly workaround for making the class abstract - defining a dummy method
        virtual void thisIsADummyMethod() = 0;
};

这很糟糕,因为任何派生的非抽象类都必须实现它

是否有更标准/流行的方式来定义和实现这样的类?

我想澄清一下 - 我不想要另一个丑陋的解决方法 - 我问是否有任何常用的标准方法。目标是使代码对其他程序员可读,因此他们立即明白该类是抽象的

【问题讨论】:

    标签: c++ abstract-class pure-virtual


    【解决方案1】:

    定义受保护的构造函数

    【讨论】:

    • 乍一看听起来不错,但它不会阻止您从其方法中创建类的实例
    • @SomethingSomething,如果方法不是静态的,那么如何调用它们?如果它们是静态的,那么它们很可能是应该能够调用 ctor 的工厂方法。 C++ 无法读懂程序员的心思。如果他们做错了什么,那么程序将完全按照要求做的错误。
    • 我同意。如果您的方法是not 静态的,它们将无法运行,因为您应该有一个没有人可以创建的实例。但是如果你的方法are static,那么有人可以运行它们并且他们可以创建实例。我希望该类完全是“抽象的”,就像在 Java 中使用“抽象”关键字定义的类一样。我想阻止任何尝试实例化它而不是由孩子的构造函数
    • #define ABSTRACT /*void*/ 用于例如ABSTRACT class Animal {...}; 为你工作?
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2019-12-08
    • 2015-05-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多