c ++从虚函数调用静态函数

时间:2016-11-27 01:49:55

标签: c++ virtual-functions static-functions

我有一个调用适当类的静态方法的虚方法:

class A{
public:
    static void bar() {std::cout<<"bar A\n";}
    virtual void foo(){
      //Some A work...
      bar();
    }
};

class B : public A{
public:
    static void bar() {std::cout<<"bar B\n";}
    virtual void foo() override {
       //Some B work...
       bar(); //prints bar B, as intended.
   }
};

但现在我想要使用方法foo()的C类,最后调用C :: bar()的唯一差异:

class C : public A {
public:
    static void bar() override {std::cout<<"bar C\n";}
    virtual void foo(){
      //Some **A** work...
      bar(); //I want to print "bar C" here
    }
}

但是,这里我需要制作方法A :: foo定义的完整副本。我还可以引入虚拟虚方法,如`virtual void callStaticBar(){bar();},并在类C中用相同的文本覆盖它。是否有更优雅的方式来做这样的事情?

1 个答案:

答案 0 :(得分:0)

没有。如果未定义C::foo(),则在foo()实例上调用C将真正调用A::foo();由于班级A不知道班级C(除了带有vtable的情况除外),A::foo()无法调用C::bar(),无论事实如何原始呼叫来自C实例。

您需要使用虚拟虚拟方法,或者告诉我们您想要实现的内容,因为在特定情况下它们可能是更好的解决方案。