我们可以有一个虚拟静态方法吗?(C++)

Ron*_*n_s 41 c++ virtual static

可能重复:
C++静态虚拟成员?

我们可以使用虚拟静态方法(在C++中)吗?我试过编译以下代码:

#include <iostream>
using namespace std;

class A
{
public:
    virtual static void f() {cout << "A's static method" << endl;}
};

class B :public A
{
public:
    static void f() {cout << "B's static method" << endl;}
};

int main()
{
    /* some code */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是编译器说:

member 'f' cannot be declared both virtual and static
Run Code Online (Sandbox Code Playgroud)

所以我猜答案是否定的,但为什么呢?

谢谢,罗恩

Mic*_*son 53

static对类中的函数的编号意味着该函数不需要操作对象.virtual表示实现取决于调用对象的类型.对于静态也没有调用对象,所以它没有任何意义有两个staticvirtual上相同的功能.

  • 您的回答是正确的,但您的解释却不正确。您可以使用一个对象来确定要调用的静态方法。在Python中,其工作方式如下:https://ideone.com/fWtTUi (2认同)
  • @ not-a-user您还可以从C ++中的对象调用静态函数,因此您可以执行f.static_function()和F :: static_function()(我说不需要对象) ,无法调用)。但是您是对的-在我们有一个对象的情况下,C ++可以使用vtable查找适当的函数-在这种情况下,虚拟静态是有意义的。正如您所说的,重载可用于将虚拟调用转发给正确的静态函数(或者编译器是否认为该模棱两可?) (2认同)