Así que ahora puede tener estructura de función virtual y la herencia de apoyo? ¿Qué diferencia con las clases entonces? Lo que el verdadero propósito de la ocultación de información? [duplicar]

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

Pregunta

  

Duplicar posibles:
   ¿Cuáles son las diferencias entre la estructura y la clase en C ++

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

Creo que mi "maestro" no me dijo mucho acerca de las diferencias entre la estructura y las clases en C ++.

He leído en alguna otra pregunta que en relación con la herencia, struct son públicos por defecto ... También supongo estructura no tiene constructores / destructores ...

¿Cuáles son las otras diferencias, entonces? Qué son importantes tanto?

Y cuando se habla de / protegidas atributos / métodos privados, que no son accesibles en tiempo de ejecución, sólo porque el compilador dice que por lo que en tiempo de compilación e informa de un error, ¿verdad? A continuación, la comparación de esas características con las clases, ¿qué significa "ocultación de información" realmente llevar al programador? Es aquí, así que cuando alguien reutilización de la clase, esta persona no abusar de la clase porque el material privado / protegido será reportada por el compilador?

Todavía lucha con el verdadero propósito de ocultar información, todavía quiero sonar en mi cabeza como que aporta una mayor seguridad en los programas, lo que significa menos brechas de seguridad, pero realmente estoy confundido acerca de la meta de dicho diseño en el idioma ... (y no tiene la intención de estar en contra de C ++ de ninguna manera, acabo de entender en qué casos esta característica puede ser interesante o no; si no, eso no es un problema, pero me gusta saber ... ).

¿Fue útil?

Solución

En lo que se refiere al compilador, no hay ninguna diferencia entre struct y class aparte de la accesibilidad por defecto. Son sólo dos palabras clave diferentes para la definición de la misma cosa. Por lo tanto, estructuras pueden tener constructores, destructores, clases de base, funciones virtuales, todo.

En lo que se refiere a los programadores, es una convención común el uso de struct para las clases con ninguna de esas cosas (específicamente que son POD ), o para ir aún más lejos y el uso struct sólo para las clases sin funciones miembro definidas por el usuario en absoluto, sólo los miembros de datos públicos. La gente a veces lío esta convención, porque es sorprendentemente fácil pensar en una clase es POD cuando no lo es, pero al menos están tratando.

En C ++, al menos, la ocultación de información es absolutamente nada que ver con la seguridad. Puesto que sale bien de su mente. No proporciona ningún tipo de seguridad, excepto en la misma forma general de que cualquier buenas prácticas de codificación para el código hace que sea más fácil para razonar acerca, y por lo tanto a programadores a hacer menos errores.

El propósito de ocultación de información es permitir que cambie la ejecución más tarde, tal vez para eliminar o cambiar el nombre de los miembros privados, con la certeza de que ninguno de los usuarios de su clase, fuera de la clase en sí y amigos, se está refiriendo a ellos . Obviamente, es útil para hacer exactamente eso, pero menos obvia y quizás más importante, su utilidad, ya que hace explícita en el código lo que la interfaz de su clase es, que que desee clientes para su uso, y que los usuarios de su clase puede esperar que por derecho al trabajo. Se puede obtener el mismo resultado, en principio, con la documentación, pero en la práctica es agradable para el compilador para hacer cumplir las normas.

No es "seguro", porque en cualquier compilador dado que es posible evitar / protección pública privada. Sin embargo, si los usuarios de la clase hacen eso, están usando algún artilugio grotesca, que merecen por su código para detener la compilación / trabajo cuando cambie su clase, y si vienen a que se quejan de que puede reírse de ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top