Подтвердить что ты не робот

Можем ли мы иметь виртуальный статический метод? (С++)

Возможный дубликат:
Статические виртуальные элементы С++?

Можно ли создать виртуальный статический метод (на С++)? Я попытался скомпилировать следующие код:

#include <iostream>
using namespace std;

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

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

int main()
{
    /* some code */
    return 0;
}

но компилятор говорит, что:

member 'f' cannot be declared both virtual and static

поэтому я думаю, что ответ отрицательный, но почему?

спасибо, Рон

4b9b3361

Ответ 1

Нет. static для функции в классе означает, что функции не требуется объект для работы. virtual означает, что реализация зависит от типа вызывающего объекта. Для статики нет вызывающего объекта, поэтому нет смысла иметь как static, так и virtual на той же функции .

Ответ 2

Не думайте, что это возможно, потому что вы можете вызвать A::F(); без объекта A. Сделать его виртуальным и статическим будет означать противоречие.

Ответ 3

Поскольку класс не имеет указателя this. В ней находится таблица поиска виртуальных функций. Быстрый google может рассказать вам больше о таблице поиска виртуальных функций.

Ответ 4

Нет, функция static похожа на глобальную функцию, но также внутри пространства имен. virtual подразумевает наследование и переопределение в производном классе - вы не можете переопределить "глобальную" функцию.