Double Possible:
Virtuelle C++/Virtuelle Pure ExpliquéSalut,
J'ai besoin de savoir quelle est la différence entre une fonction virtuelle pure et une fonction virtuelle?
Je sais que "Fonction Virtuelle Pure est une fonction Virtuelle sans corps", mais qu'est-ce que cela signifie et ce qui est réellement fait par la ligne ci-dessous:
virtual void virtualfunctioname() = 0
- C ++ Virtual / Pure Virtual Expliqué (5 réponses )
Réponses
Trop de publicités?Une fonction virtuelle rend sa classe un polymorphe de la classe de base. Les classes dérivées peuvent substituer des fonctions virtuelles. Fonctions virtuelles appelées par le biais de la classe de base des pointeurs/références seront réglées au moment de l'exécution. C'est le type dynamique de l'objet est utilisé à la place de son type statique:
Derived d;
Base& rb = d;
// if Base::f() is virtual and Derived overrides it, Derived::f() will be called
rb.f();
Une fonction virtuelle pure est une fonction virtuelle dont la déclaration se termine en =0
:
class Base {
// ...
virtual void f() = 0;
// ...
Une fonction virtuelle pure fait la classe à laquelle il est défini pour l' abstrait. Les classes abstraites ne peut pas être instanciée. Les classes dérivées doivent remplacer/mettre en œuvre tous hérité des fonctions virtuelles pures. S'ils ne le font pas, ils seront aussi devenir abstrait.
En C++, une classe peut définir une fonction virtuelle pure qui a une implémentation. (Ce qui est discutable.)
Pour une fonction virtuelle, vous devez fournir la mise en œuvre dans la classe de base. Toutefois classe dérivée peut remplacer cette mise en œuvre avec sa propre mise en œuvre. Normalement , pour les fonctions virtuelles pures de la mise en œuvre n'est pas fourni. Vous pouvez faire une fonction virtuelle pure avec =0
à la fin de la déclaration de la fonction. Aussi, une classe contenant une fonction virtuelle pure est abstrait, c'est à dire que vous ne pouvez pas créer un objet de cette classe.
Une fonction virtuelle pure est généralement pas (mais peut être) mis en œuvre dans une classe de base et doit être mis en œuvre dans une feuille de sous-classe.
Vous dénoter que le fait en ajoutant le "= 0" à la déclaration, comme ceci:
class AbstractBase
{
virtual void PureVirtualFunction() = 0;
}
Ensuite, vous ne pouvez pas déclarer et instancier une sous-classe, sans elle, la mise en œuvre de la fonction virtuelle pure:
class Derived : public AbstractBase
{
virtual void PureVirtualFunction() { }
}
Vous pouvez réellement fournir des implémentations de pures fonctions virtuelles en C++. La seule différence est que toutes les fonctions virtuelles pures doivent être implémentées par les classes dérivées avant de la classe peut être instancié.