2010-03-27 8 views

Répondre

6

Si vous déclarez une méthode comme static, vous pouvez l'appeler directement sans avoir besoin d'une instance de classe. Sinon, vous devrez avoir une instance d'une classe dérivée.

Étant donné qu'une classe abstraite ne peut pas être instanciée directement, vous ne pouvez pas appeler directement une méthode d'une classe abstraite sauf si est une méthode statique. Mais vous pouvez appeler une méthode statique d'une classe abstraite directement, voici un exemple rapide:

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

Alternativement, si vous avez une instance d'une classe qui est dérivée d'une classe abstraite, vous pouvez le traiter comme instance de la classe abstraite et peut appeler n'importe quelle méthode.

+0

merci beaucoup – cemregoksu

5

La classe abstraite n'implique pas que vous n'avez pas d'instance, elle implique que le type d'exécution de l'instance est en réalité une classe dérivée qui fournit des implémentations pour les fonctions virtuelles pures dans la classe de base abstraite. Mais toutes les fonctions membres d'une classe abstraite ne doivent pas être purement virtuelles, vous pouvez avoir un mélange de fonctions concrètes et abstraites. Lorsque vous appelez des fonctions membres "sur la classe abstraite", toutes les fonctions virtuelles, y compris les fonctions virtuelles pures, sont appelées polymorphiquement. Ainsi, le remplacement défini dans la classe dérivée est exécuté. Les fonctions non virtuelles appellent la définition dans la classe de base, vous ne pouvez pas avoir de fonctions concrètes concrètes, même une classe abstraite doit fournir une implémentation pour des fonctions non virtuelles.

Il est même possible pour une fonction virtuelle pure d'avoir une implémentation fournie par la classe de base abstraite. Un remplacement doit toujours être fourni, mais le remplacement peut appeler l'implémentation de la classe de base.

Questions connexes