Alors maintenant, peut avoir struct fonction virtuelle et l'héritage de soutien? Quelle différence avec les classes, alors? Ce que le véritable but de cacher l'information? [dupliquer]

StackOverflow https://stackoverflow.com/questions/3845564

Question

  

Possible en double:    Quelles sont les différences entre struct et classe en C ++

http://www.cplusplus.com/reference/std/typeinfo/ type_info /

Je suppose que mon « professeur » ne m'a pas dit beaucoup de choses sur les différences entre les classes et struct en C ++.

Je lis dans une autre question qu'en ce qui concerne l'héritage, struct sont publiques par défaut ... Je suppose aussi struct ne dispose pas des constructeurs / ... Destructeurs

Quelles sont les autres différences alors? Est-ce qu'ils importent beaucoup?

Et en parlant au sujet des attributs / méthodes privées / protégées, ils ne sont pas accessibles à l'exécution, uniquement parce que le compilateur indique si au moment de la compilation et signale une erreur, non? Ensuite, on compare les caractéristiques des classes, qu'est-ce que vraiment apporter « cacher l'information » au programmeur? Est-il ici de sorte que lorsque quelqu'un réutiliser la classe, cette personne ne sera pas abuser de la classe parce que la substance privée / protégée sera signalé par le compilateur?

Je lutte toujours avec le but réel de cacher l'information, il veut encore son dans ma tête comme il apporte plus de sécurité dans les programmes, ce qui signifie moins les failles de sécurité, mais je suis vraiment confus sur l'objectif de cette conception dans la langue ... (et je ne pas l'intention d'être contre C ++ de quelque façon, je viens de comprendre dans quels cas cette fonction peut être intéressant ou non, sinon, ce n'est pas un problème, mais je savoir ... ).

Était-ce utile?

La solution

En ce qui concerne le compilateur est concerné, il n'y a pas de différence entre struct et class autre que l'accessibilité par défaut. Ils sont juste deux mots-clés différents pour définir la même chose. Ainsi, struct peuvent avoir des constructeurs, destructeurs, classes de base, les fonctions virtuelles, tout.

En ce qui concerne les programmeurs sont concernés, il est une convention commune à l'utilisation struct pour les classes avec aucune de ces choses (en particulier qui sont POD ), ou d'aller encore plus loin et struct utilisation que pour les classes sans fonctions membres définies par l'utilisateur à tous, seuls les membres de données publiques. Parfois, les gens gâcher cette convention, parce qu'il est étonnamment facile de penser une classe est POD quand il est pas, mais au moins ils essaient.

En C ++, au moins, se cacher de l'information est absolument rien à voir avec la sécurité. Mettez ça à droite de votre esprit. Il ne fournit aucune sécurité, à l'exception de la même manière générale que tout bon codage pratique rend le code plus facile à raisonner sur, et donc les programmeurs font moins d'erreurs.

Le but de cacher l'information est de vous permettre de changer la mise en œuvre plus tard, peut-être supprimer ou renommer des membres privés, en sachant qu'aucun des utilisateurs de votre classe, en dehors de la classe elle-même et ses amis, fait référence à leur . De toute évidence, il est utile de faire exactement cela, mais de façon moins évidente et peut-être plus important encore, son utilité, car il rend explicite dans le code ce que l'interface de votre classe est, que vous voulez clients à utiliser, et que les utilisateurs de votre classe peut légitimement attendre à travailler. Vous pouvez obtenir la même chose, en principe, avec la documentation, mais dans la pratique, il est agréable pour le compilateur de faire respecter les règles.

Il est pas « sûr » parce que sur un compilateur donné, il est possible de travailler autour de la protection du public / privé. Mais si les utilisateurs de votre classe le font, ils utilisent une astuce grotesque, ils méritent pour leur code pour arrêter la compilation / travail lorsque vous changez de classe, et si elles viennent à se plaindre, vous pouvez rire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top