我们可以使用虚拟静态方法(在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;
}
但是编译器说:
member 'f' cannot be declared both virtual and static
所以我猜答案是否定的,但为什么呢?
谢谢, 罗恩答案 0 :(得分:51)
没有。 static
对类中的函数意味着该函数不需要操作对象。 virtual
表示实现取决于调用对象的类型。对于静态,没有调用对象,因此在同一函数上同时使用static
和virtual
没有意义
答案 1 :(得分:4)
不要认为这是可能的,因为你可以在没有对象A的情况下调用A::F();
。
虚拟和静态意味着矛盾。
答案 2 :(得分:2)
因为该类没有this
指针。在那里有虚函数查找表。快速谷歌可以告诉您有关虚拟功能查找表的更多信息。
答案 3 :(得分:1)
不,static
函数就像全局函数一样,但也在类名称空间内。 virtual
意味着派生类中的继承和重新实现 - 您无法重新实现“全局”功能。