Différence entre virtual void funcFoo() const = 0 et virtual void funcFoo() = 0;
J'ai une déclaration du rpc, où une fonction est comme:
virtual void funcFoo() const = 0;
Je suppose que peut être transmis par une autre classe s'est déclaré explicite, mais quelle est la différence entre
virtual void funcFoo() = 0;
Est important pour moi d'améliorer mon programmation et je veux savoir la différence. Je ne veux pas d'un dysfonctionnement causé par une mauvaise hériter.
Merci d'avance.
- stackoverflow.com/questions/751681/...
- Réponse courte:
const
exactitude.
Vous devez vous connecter pour publier un commentaire.
La première signature signifie que la méthode peut être appelée sur un const instance d'un type dérivé. La deuxième version ne peut pas être appelé const instances. Ils sont différents des signatures, de sorte que par la mise en œuvre de la deuxième, vous n'êtes pas la mise en œuvre ou de la transgression de la première version.
Le meilleur tutoriel ou de la Faq que j'ai vu sur const correctectness a été le C++ FAQ par parashift:
Prendre un coup d'oeil: http://www.parashift.com/c++-faq-lite/const-correctness.html
const
de l'objet.La différence est que la première fonction peut être appelée sur
const
des objets, tandis que la seconde ne le peuvent pas. En outre, la première fonction ne peut appeler d'autresconst
fonctions de membre sur le même objet. Concernant l'héritage, ils se comportent de la même manière.Voir aussi la C++ FAQ sur ce sujet.
Les deux fonctions virtuelles ont des signatures différentes, mais héritant fonctionnera de la même manière. Le premier est un const méthode et ne peuvent prendre en charge const opérations (méthodes) et des objets.
const méthodes ne pouvez pas changer l'état de l'objet de sorte que le
sera appelé en const instances de cette classe à la différence de
qui pourrait être appelé qu'en non constante instances.
Essayez de google pour la const logique en c++.
http://en.wikipedia.org/wiki/Const-correctness