6
votes

En utilisant une méthode de classe abstraite

est-il possible d'utiliser une méthode d'une classe abstraite? Comment puis-je utiliser une méthode d'une classe sans avoir d'instance?


0 commentaires

3 Réponses :


7
votes

Si vous déclarez une méthode comme statique , 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 une méthode de classe abstraite directement sauf si est une méthode statique. Mais vous pouvez appeler directement une méthode statique d'une classe abstraite directement, voici un exemple rapide: xxx

alternativement, si vous avez une instance d'une classe dérivée d'un résumé classe, vous pouvez le traiter comme une instance de la classe abstraite et peut appeler toutes les méthodes à ce sujet.


0 commentaires

5
votes

La classe abstraite n'implique pas que vous n'avez pas d'instance, cela 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 doivent être virtuelles pure, vous pouvez avoir un mélange de fonctions concrètes et abstraites.

Lorsque vous appelez les fonctions membres "sur la classe abstraite", toutes les fonctions virtuelles, y compris les pur virtuels, sont appelées polymorphes. Donc, 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 de béton pure, donc même une classe abstraite doit fournir une mise en œuvre 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 encore être fourni, mais le remplacement peut alors appeler la mise en œuvre de la classe de base.


0 commentaires

2
votes

Je pense que vous pouvez le faire à l'aide d'un pointeur.

#include <iostream>

class A
{
    public:
    virtual void showName()=0;
    void show(){std::cout<<"class A"<<std::endl;}
};

int main()
{
    A *a;
    a->show();
}


0 commentaires