【问题标题】:In C++ is it possible to have a defined purely virtual function?在 C++ 中是否可以定义纯虚函数?
【发布时间】:2010-09-25 18:54:00
【问题描述】:

这是交易。我有一个很大的类层次结构,我有一个一直扩展的方法。该方法总是必须在每个新级别查看一个或两个以上变量,这些变量取决于层次结构中的实际类。我想要做的是检查这两个额外的变量,然后调用同一个函数的超类版本。我希望能够定义这个函数,因为它的所有直接子级都将使用它,但我想强制该类的任何子级必须重新定义该方法(因为他们必须查看他们的新数据成员)

那我该怎么写呢?我通常使用 =0;在 .h 文件中,但我认为我不能使用它并定义它...

【问题讨论】:

    标签: c++ function inheritance pure-virtual


    【解决方案1】:

    实际上你可以将一个函数声明为纯虚函数,并且仍然在基类中为它定义一个实现。

    class Abstract {
    public:
       virtual void pure_virtual(int x) = 0;
    };
    
    void Abstract::pure_virtual(int x) {
       // do something
    }
    
    
    class Child : public Abstract {
        virtual void pure_virtual(int x);
    };
    
    void Child::pure_virtual(int x) {
        // do something with x
        Abstract::pure_virtual();
    }
    

    【讨论】:

    • 可能我脑子太小了,但是在派生类中更改pure_virtual的签名让我很困惑。它说明了什么?
    • onebyone 很好,我没发现。我怀疑这是一个错字?
    • 原始问题将额外数据传递给子类中定义的函数。既然你提到它,我认为它也应该在基类中。
    【解决方案2】:

    您可以为纯虚函数提供定义。更多信息请查看GotW #31

    【讨论】:

      猜你喜欢
      • 2019-07-28
      • 1970-01-01
      • 2011-12-25
      • 2012-04-19
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      相关资源
      最近更新 更多