c++ - puro - ¿Podemos tener unas funciones virtuales estáticas? Si no, entonces ¿POR QUÉ?
polimorfismo puro c++ (2)
Eso no tendría ningún sentido. El punto de las funciones miembro virtuales es que se envían según el tipo dinámico de la instancia del objeto en el que se llaman. Por otro lado, las funciones estáticas no están relacionadas con ninguna instancia y son más bien una propiedad de la clase . Por lo tanto, no tiene sentido que sean virtuales. Si debe hacerlo, puede usar un despachador no estático:
struct Base
{
static void foo(Base & b) { /*...*/ }
virtual ~Base() { }
virtual void call_static() { foo(*this); /* or whatever */ }
};
struct Derived : Base
{
static void bar(int a, bool b) { /* ... */ }
virtual void call_static() { bar(12, false); }
};
Uso:
Base & b = get_instance();
b.call_static(); // dispatched dynamically
// Normal use of statics:
Base::foo(b);
Derived::bar(-8, true);
Posible duplicado:
¿C ++ miembros virtuales estáticos?
¿Podemos tener unas funciones virtuales estáticas? Si no, entonces ¿POR QUÉ?
class X
{
public:
virtual static void fun(){} // Why we cant have static virtual function in C++?
};
No, porque no tiene ningún sentido en C ++.
Las funciones virtuales se invocan cuando tiene un puntero / referencia a una instancia de una clase. Las funciones estáticas no están vinculadas a una instancia en particular, están vinculadas a una clase. C ++ no tiene punteros a clase, por lo que no hay ningún escenario en el que pueda invocar una función estática virtualmente.