是否可以显式使用祖先的虚拟类方法作为派生方法?

Can you explicitly use an ancestor's virtual class method as a derived method?

本文关键字:类方法 虚拟 派生 方法 祖先 是否      更新时间:2023-10-16

是否可以在覆盖远祖的虚拟函数后显式使用该函数?类似以下内容?


class A {
    virtual void task();
};
class B: public A {
    virtual void task() override;
};
class C: public B {
    virtual void task() = A::task; /* C++ doesn't like this */
};

我真的不想重新实施已经实施的东西。从技术上讲,这似乎是可能的,因为c++使用虚拟表来指向类方法,所以在幕后,它应该能够将A的方法指针放在表中,就好像它从未被重写一样。

我不想这样做:


class C: public B {
    virtual void task() {
        A::task();
    }
};

如果要在类A中使用方法实现,可以像A::task()一样简单地调用它。

这是一个非虚拟的电话。


关于

"c++使用虚拟表指向类方法

…不,事实并非如此,尽管这是常见的实现方式。


关于

"我不想这样做:

class C: public B {
  virtual void task() {
      A::task();
  }
}

…如果您希望C类中的task充当A::task实现,那么就是这样做的。

你说:

我不想这样做:

class C: public B {
   virtual void task() {
      A::task();
   }
};

考虑到目前的标准状态,我认为这是最好的解决方案。