c++ - virtuale - tabella dei metodi virtuali




Possiamo avere una funzione virtuale statica? Se no, allora PERCHÉ? (2)

No, perché non ha alcun senso in C ++.

Le funzioni virtuali vengono invocate quando si ha un puntatore / riferimento a un'istanza di una classe. Le funzioni statiche non sono legate a una particolare istanza, sono legate a una classe. Il C ++ non ha puntatori per classe, quindi non esiste uno scenario in cui si possa virtualmente invocare una funzione statica.

Possibile duplicato:
Membri virtuali statici C ++?

Possiamo avere una funzione virtuale statica? Se no, allora PERCHÉ?

class X
{
public:
       virtual static void fun(){} // Why we cant have static virtual function in C++?
};

Non avrebbe senso. Il punto delle funzioni dei membri virtuali è che vengono inviate in base al tipo dinamico dell'istanza dell'oggetto su cui vengono chiamate. D'altra parte, le funzioni statiche non sono correlate a nessuna istanza e sono piuttosto una proprietà della classe . Quindi non ha senso che siano virtuali. Se è necessario, è possibile utilizzare un dispatcher non statico:

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);






virtual-functions