10
votes

Définir une déclaration de fonction virtuelle à zéro?

Duplicaté possible:

Pourquoi la fonction virtuelle pure est initialisée par 0?

en C ++, que signifie-t-il que définir une déclaration de fonction à zéro? Je suppose que cela a à voir avec la fonction d'être virtuel et non défini dans cette classe. Trouvé dans un fichier d'en-tête de code que je lis: xxx

Qu'est-ce qui se passe ici?


5 commentaires

Ouvrez votre livre C ++ préféré et lisez sur Pure Fonctions virtuelles. Apprendre les bases de la langue en demandant des questions génériques sur un forum n'est pas exactement une chose significative à faire. Certaines informations peuvent être trouvées ici en.wikipedia.org/wiki/virtual_function


@Ttroubadour: FWIW: Cette question est d'un angle "Qu'est-ce que cela signifie même" tandis que cette question est "compte tenu de ce sens, pourquoi a-t-il l'air de cette façon"


@Andreyt dans ma défense, la syntaxe est tellement arcanique que je ne saurais pas chercher des fonctions virtuelles pures (que je comprends déjà). Je dirais que demander à cette question générique sur un forum était très significatif pour moi.


tinyurl.com/2dbotnc --- Regardez le deuxième résultat.


@Andreyt, comment l'astitution peut-il savoir de chercher "la fonction virtuelle pure" s'ils ne savent pas que "= 0" signifie fonction virtuelle pure? Je comprends de l'endroit où vous venez, mais il est possible d'apprendre et de faire C ++ pendant un certain temps sans rencontrer ce concept.


8 Réponses :


0
votes

Cela signifie que, la classe est abstraite, et ne peut pas créer son objet. Il pourrait être utilisé comme une classe classe à une autre.
La classe virtuelle pure est également utilisée dans C ++ en tant qu'interface connu de la langue comme Java , mais bien sûr, il est différent.


0 commentaires

16
votes

C'est un fonction virtuelle pure . Cela le fait, vous devez donc dériver une classe (et mettre en œuvre ladite fonction) afin de l'utiliser.


2 commentaires

En plus de dériver, vous devez les mettre en œuvre aussi bien dans les classes dérivées.


Qui entraîne une classe abstraite.



0
votes

Si vous définissez une fonction virtuelle pour définir, ses fonctions virtuelles appelées pures. Et puis votre classe devient une classe abstraite. Vous ne pouvez pas créer d'instances de cette classe ou de sous-classes à moins que vos fonctions virtuelles pures soient implémentées.


0 commentaires

1
votes

Cela signifie que c'est un PURE Virtual méthode, ce qui signifie que les sous-classes doivent mettre en œuvre la méthode à leur propre. Il peut toujours y avoir une implémentation pour cette méthode, mais des classes avec des méthodes virtuelles pures ne peuvent pas être instanciées, ce qui rendait cela similaire au mot clé abstrait observé dans diverses autres langues.


3 commentaires

Malgré le nom, une méthode virtuelle pure peut avoir une mise en œuvre ... une déclaration de pur virtuel signifie que la classe est abstraite et qu'une classe dérivée doit mettre en œuvre la fonction pour être non abstraite. Cela ne signifie pas que la méthode n'a pas de mise en œuvre dans la classe de base (elle peut en réalité avoir une implémentation dans la classe de base).


Ah oui, bien sûr. Ma faute. Je vais éditer mon post.


NIT Pick: C ++ a des fonctions, pas des méthodes. Le terme correct est la fonction virtuelle pure .



3
votes

Ceci s'appelle une fonction de membre virtuel pur dans C ++ Lingo. Comme vous le devinez, cela signifie que la fonction n'est pas définie dans la classe, mais elle doit plutôt être mise en œuvre pour dériver des cours. Vous ne pouvez pas instancier les cours avec des fonctions de membre virtuel pur, les fonctions virtuelles pures se comportent essentiellement comme des méthodes abstraites dans Java ou C #.


1 commentaires

Cela ne signifie pas que ce n'est pas défini, cela doit être remplacé. Cela peut avoir une définition.



0
votes

La méthode SETVALUE est pur virtuel. Sa classe ne fournit pas la mise en œuvre de cette méthode et ne peut pas être instanciée (par conséquent, nous l'éloignons). Les classes dérivées concrètes d'autre part doivent fournir des implémentations pour de telles méthodes. En voir plus ici .


0 commentaires

0
votes

Comme tout le monde l'a mentionné, cela signifie que la fonction est une fonction virtuelle pure. Pensez à cela comme définissant le pointeur de la fonction sur NULL. Les classes avec des fonctions virtuelles pures sont traitées comme des classes abstraites. Cela signifie que les classes dérivées doivent mettre en œuvre cette fonction virtuelle.

occasionnellement, vous pouvez rencontrer ce qu'on appelle une erreur "pure appel". Cela signifie qu'une fonction virtuelle pure a été appelée et cela entraînera probablement un crash du programme. La cause la plus courante d'un appel pur est que l'objet que la fonction a été appelé était déjà supprimé.


0 commentaires

0
votes

"SETVALUE" est une fonction de membre virtuel pur que la classe de base force les classes dérivées à fournir. Les fonctions de membre virtuel pur n'auront aucune implémentation.

Une fonction de membre virtuel pur spécifie qu'une fonction de membre existera sur chaque objet d'une classe dérivée de béton, même si la fonction de membre n'est pas (normalement) définie dans la classe de base.

Ceci est dû au fait que la syntaxe de spécification d'une fonction de membre virtuel pur oblige les classes dérivées pour mettre en œuvre la fonction de membre si les classes dérivées ont l'intention d'être instanciées (c'est-à-dire si elles ont l'intention d'être concrète).

Dans votre cas, tous les objets de classes dérivés de la classe de base auront la fonction de membre SETValue (). Cependant, comme la classe de base est un concept abstrait, il ne contient pas suffisamment d'informations pour mettre en œuvre StValue ().

Imaginez que le "= 0" aime dire "Le code de cette fonction est au pointeur NULL."

Les fonctions de membre virtuel pur permet aux utilisateurs d'écrire un code contre une interface pour laquelle il existe plusieurs variantes fonctionnellement différentes. Cela signifie que des objets sémantiquement différents peuvent être transmis à une fonction si ces objets sont tous sous le parapluie de la même classe de base abstraite.


0 commentaires