2010-03-27 19 views

Odpowiedz

6

Jeśli zadeklarujesz Sposób static, można nazwać to bezpośrednio, bez konieczności instancji klasy. W przeciwnym razie musisz mieć instancję klasy pochodnej.

Ponieważ klasa abstrakcyjna nie może być instancja bezpośrednio, nie można wywołać metodę z klasy abstrakcyjnej bezpośrednio chyba jest to metoda statyczna. Ale można nazwać metodą statyczną klasy abstrakcyjnej bezpośrednio, oto krótki przykład:

#include <iostream> 
#include <ostream> 
#include <fstream> 
using namespace std; 

class stest{ 
    public: 
    static void test(); 
    virtual void a() = 0; 
    }; 

void stest::test(){ cout << "test\n"; } 

int main(){ 
    stest::test(); 
    return 0; 
} 

Ewentualnie, jeśli masz instancję klasy, która pochodzi od klasy abstrakcyjnej, można traktować go jako instancja klasy abstrakcyjnej i może wywoływać na niej dowolne metody.

+0

dziękuję bardzo – cemregoksu

5

abstrakcyjna klasa nie oznacza, że ​​nie ma instancji, oznacza to, że rodzaj runtime instancji jest rzeczywiście niektóre klasy pochodnej, która dostarcza implementacje dla czystych funkcji wirtualnych w abstrakcyjnej klasy bazowej. Ale nie wszystkie funkcje składowe klasy abstrakcyjnej muszą być czysto wirtualne, możesz mieć mieszankę funkcji konkretnych i abstrakcyjnych.

Po wywołaniu funkcji składowych „w klasy abstrakcyjnej”, wszystkie funkcje wirtualne, w tym czystych wirtualne, są nazywane polimorficznie. Tak więc nadpisanie zdefiniowane w klasie pochodnej zostanie wykonane. Funkcje inne niż wirtualne wywołują definicję w klasie bazowej, nie można mieć czystych konkretnych funkcji, więc nawet klasa abstrakcyjna musi zapewniać implementację funkcji nie-wirtualnych.

Jest nawet możliwe, że funkcja czysto wirtualna ma implementację zapewnioną przez abstrakcyjną klasę podstawową. Nadpisanie nadal musi być zapewnione, ale wówczas nadpisanie może wywołać implementację klasy podstawowej.

Powiązane problemy