Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以有一个虚拟的静态方法吗?(c+;+;)_C++_Static_Virtual - Fatal编程技术网

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

C++ 我们可以有一个虚拟的静态方法吗?(c+;+;),c++,static,virtual,C++,Static,Virtual,可能重复: 我们可以有一个虚拟静态方法(在C++中)吗?我试着编译以下内容 代码: 所以我猜答案是否定的,但为什么呢 谢谢, Ron否。类中函数的静态表示该函数不需要对象来操作virtual表示实现取决于调用对象的类型。对于static,没有调用对象,因此在同一个函数上同时使用static和virtual是没有意义的 。其中有虚拟函数查找表。一个快速的google可以告诉你更多关于虚拟函数查找表的信息。不要认为这是可能的,因为你可以调用A::F()没有对象A。 将其虚拟化和静态化将意味着矛盾。

可能重复:

我们可以有一个虚拟静态方法(在C++中)吗?我试着编译以下内容 代码:

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

谢谢,
Ron

否。
类中函数的静态
表示该函数不需要对象来操作
virtual
表示实现取决于调用对象的类型。对于static,没有调用对象,因此在同一个函数上同时使用
static
virtual
是没有意义的
。其中有虚拟函数查找表。一个快速的google可以告诉你更多关于虚拟函数查找表的信息。

不要认为这是可能的,因为你可以调用
A::F()没有对象A。

将其虚拟化和静态化将意味着矛盾。

不,
静态
函数类似于全局函数,但也在类名称空间内
virtual
意味着在派生类中继承和重新实现-您不能重新实现“全局”函数。

Aha,那么static意味着*这不存在,virtual意味着方法有一个this指针。两者的结合形成了矛盾。尼斯:)谢谢,没有矛盾。在
A::F()
中,类是硬编码的,而在
this->F()
中,可以从对象中派生要调用的正确函数(通过虚拟函数查找)。事实是C++没有支持这个。在Python中,它是开箱即用的:您的答案是正确的,但您的解释是错误的。您可以使用对象来确定要调用哪个静态方法。在Python中,它的工作原理是:“不使用户,你也可以从C++中的对象调用静态函数,这样你就可以做<代码> fStistAfSype()/<代码>以及'f::STATICH函数()。(我说不需要一个对象,不能调用)。但你是对的——在我们有一个对象C++的情况下,可以使用VTABLE查找一个适当的函数——在这种情况下,虚拟静态是有意义的。正如你所说的,过载可以用来将虚拟调用转发到正确的静态函数(或者编译器认为这是模糊的)吗?没有真正的理由。它只是在C++中不被支持。(它在Python中工作:)-可以围绕静态方法创建虚拟包装器:一个忽略对象并将调用转发给静态方法的虚拟方法。
#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;
}
member 'f' cannot be declared both virtual and static