Можем ли мы иметь виртуальный статический метод? (С++)
Возможный дубликат:
Статические виртуальные элементы С++?
Можно ли создать виртуальный статический метод (на С++)? Я попытался скомпилировать следующие
код:
#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
поэтому я думаю, что ответ отрицательный, но почему?
спасибо,
Рон
Ответы
Ответ 1
Нет. static
для функции в классе означает, что функции не требуется объект для работы. virtual
означает, что реализация зависит от типа вызывающего объекта. Для статики нет вызывающего объекта, поэтому нет смысла иметь как static
, так и virtual
на той же функции
.
Ответ 2
Не думайте, что это возможно, потому что вы можете вызвать A::F();
без объекта A.
Сделать его виртуальным и статическим будет означать противоречие.
Ответ 3
Поскольку класс не имеет указателя this
. В ней находится таблица поиска виртуальных функций. Быстрый google может рассказать вам больше о таблице поиска виртуальных функций.
Ответ 4
Нет, функция static
похожа на глобальную функцию, но также внутри пространства имен. virtual
подразумевает наследование и переопределение в производном классе - вы не можете переопределить "глобальную" функцию.