2010-03-27 16 views

Respuesta

6

Si declara un método como static, puede llamarlo directamente sin necesidad de una instancia de clase. De lo contrario, necesitarás tener una instancia de una clase derivada.

Dado que una clase abstracta no puede crearse una instancia directamente, no puede llamar directamente a un método de una clase abstracta a menos que sea un método estático. Pero se puede llamar a un método estático de una clase abstracta directamente, aquí está un ejemplo rápido:

#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; 
} 

Alternativamente, si usted tiene una instancia de una clase que se deriva de una clase abstracta, se puede tratar como una instancia de la clase abstracta, y puede invocar cualquier método sobre ella.

+0

muchas gracias – cemregoksu

5

La clase abstracta no implica que no tenga una instancia, implica que el tipo de tiempo de ejecución de la instancia es realmente una clase derivada que proporciona implementaciones para las funciones virtuales puras en la clase base abstracta. Pero no todas las funciones miembro de una clase abstracta tienen que ser puramente virtuales, puede tener una combinación de funciones concretas y abstractas.

Cuando llama a funciones miembro "en la clase abstracta", todas las funciones virtuales, incluidas las virtuales puras, se llaman polimórficamente. Entonces la anulación definida en la clase derivada se ejecuta. Las funciones no virtuales llaman a la definición en la clase base, no puede tener funciones concretas puras, por lo que incluso una clase abstracta debe proporcionar la implementación de funciones no virtuales.

Incluso es posible que una función virtual pura tenga una implementación proporcionada por la clase base abstracta. Aún se debe proporcionar una anulación, pero luego la anulación puede llamar a la implementación de la clase base.

Cuestiones relacionadas