55 votes

Les méthodes abstraites et les fonctions virtuelles pures sont-elles la même chose ?

Pour autant que je sache, les méthodes abstraites et les fonctions virtuelles pures ne fournissent PAS de fonctionnalité... Peut-on donc dire qu'il s'agit de la même chose ?

Supposons également qu'une classe (pas nécessairement déclarée comme abstraite) contienne un certain nombre de méthodes implémentées (non abstraites ou virtuelles), mais qu'elle contienne une fonction virtuelle pure. Cette classe est-elle alors abstraite ?

69voto

Gordon Gustafson Points 14778

Oui c'est la même chose. En C++, une méthode abstraite est juste une autre façon de décrire les caractéristiques d'une fonction virtuelle pure. Les deux signifient simplement une méthode sans implémentation fournie qui doit être implémentée dans une sous-classe avant que la classe puisse être réellement instanciée.

La situation des fonctions virtuelles pures et des classes abstraites en C++ est similaire, car elles signifient exactement la même chose. Toute classe abstraite doit avoir au moins une fonction virtuelle pure, sinon elle pourrait être instanciée et ne serait pas abstraite. De même, toute classe possédant au moins une fonction virtuelle pure doit être abstraite car elle doit être étendue pour que la méthode puisse être implémentée.

Par conséquent, une classe est abstraite si et seulement si il contient au moins une fonction virtuelle pure ou une méthode abstraite.

Plus tard, des langages comme Java et C# ont rendu ce genre de choses plus explicites, en autorisant un mot clé spécial pour définir une classe abstraite plutôt que la présence d'une fonction purement virtuelle. Le C++ vous permet de faire les mêmes choses que ces langages, mais ils sont juste un peu plus explicites à ce sujet. :D

17voto

Jordão Points 29221

En C++, on ne déclare pas explicitement les classes ou les méthodes comme étant abstraites. C'est la présence de méthodes virtuelles pures qui les rend abstraites.

8voto

David Titarenco Points 17148

Oui, les méthodes abstraites sont exactement la même chose que les fonctions virtuelles pures ; les termes sont souvent utilisés de manière interchangeable. Selon l'OMI, "fonction virtuelle pure" est le terme techniquement correct du C++, qui indique spécifiquement le fait que la fonction est configurée en tant que 0 :

class myClass {
public:
  virtual void vfunc() = 0; // pure specifier
};

Une classe abstraite est défini par :

une classe qui est conçue pour être spécifiquement utilisée comme classe de base. Une classe abstraite classe abstraite contient au moins une fonction virtuelle pure.

En gros, une classe abstraite est une classe abstraite parce qu'elle est conçue pour être une classe de base (certaines classes de base doivent, par définition, avoir des méthodes implémentables qui devront être purement virtuelles). Ces classes deviennent des classes abstraites simplement par la façon dont elles sont utilisées et étendues. Contrairement à des langages comme Java, il n'y a pas de abstract o interface modificateur de mot-clé. C'est pourquoi nous avons besoin d'un "contrat verbal" pour parler des classes abstraites en C++.

5voto

En C++, une fonction membre virtuelle pure conduit à ce que le type englobant soit un "type abstrait".

Les fonctions elles-mêmes ne peuvent pas être abstraites, bien que le terme soit fréquemment utilisé à tort de cette manière.

3voto

Akhil Points 578

Je dirais que oui, les méthodes abstraites et les fonctions virtuelles pures sont conceptuellement la même chose.

Supposons également qu'une classe (pas nécessairement déclarée comme abstraite) contienne un certain nombre de méthodes implémentées (non abstraites ou virtuelles), mais qu'elle contienne une fonction virtuelle pure. Cette classe est-elle alors abstraite ?

Une classe comportant au moins une fonction virtuelle pure est appelée une classe abstraite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X