¿Cuáles son las diferencias entre estructura y clase?
En primer lugar, discutir este tema solo debe discutirse en términos de sintaxis. Si analiza las diferencias en los estilos de programación entre diferentes personas, entonces no hay respuesta a esta pregunta. Después de todo, diferentes personas tienen diferentes preferencias.
Sintácticamente, en C (sólo se habla de C). Sólo hay dos diferencias entre clase y estructura al definir tipos:
(1) Permisos de herencia predeterminados. Si no se especifica explícitamente, la herencia de la clase se tratará como herencia privada y la herencia de la estructura se tratará como herencia pública;
(2) Derechos de acceso predeterminados de los miembros. Los miembros de la clase tienen permisos privados de forma predeterminada y los miembros de la estructura tienen permisos públicos de forma predeterminada.
Excepto por estos dos puntos, clase y estructura son básicamente lo mismo. No hay otras diferencias sintácticas.
Solo porque has aprendido C, no siempre puedes sentir que la estructura y la clase en C son muy diferentes. La explicación que se enumera a continuación puede ser aburrida, porque la estructura y la clase son básicamente lo mismo y no hay ninguna. Necesito decir más. Pero estas instrucciones pueden ayudar a aclarar algunos malentendidos comunes sobre estructura y clase:
(1) Ambas pueden tener funciones miembro, incluidos varios constructores, destructores y operadores sobrecargados, clase amiga, estructura amiga, función amiga, virtual. función, función virtual pura, función estática;
(2) Puede haber muchos modificadores públicos/privados/protegidos en ella;
p>
(3) Aunque este estilo ya no se recomienda, sintácticamente ambos se pueden inicializar usando llaves: Aa={1, 2, 3}; ya sea que A sea una estructura o una clase, la premisa es Esta clase/estructura es lo suficientemente simple, de modo que todos los miembros sean público, todos los miembros son tipos simples y no hay constructores declarados explícitamente.
(4) Se puede realizar herencia compleja o incluso herencia múltiple. Una estructura puede heredar de una clase, y viceversa, una estructura puede heredar 5 clases y 5 estructuras al mismo tiempo, aunque esto es así; no muy conveniente.
(5) Si el diseño de la clase necesita prestar atención a los principios y estilos de OO, entonces no hay razón para decir que el diseño de la estructura no necesita prestar atención.
(6) Nuevamente, todas las declaraciones anteriores se refieren al lenguaje C. En cuanto a la situación en C, no existe una "clase" en C, y la estructura de C es fundamentalmente solo un mecanismo de sintaxis A. para envolver datos.
Finalmente, como dos palabras clave del lenguaje, además de las diferencias antes mencionadas a la hora de definir tipos, hay una cosa más: la palabra clave "clase" también se utiliza para definir parámetros de plantilla, al igual que " nombre de tipo" ". Pero la palabra clave "estructura" no se utiliza para definir los parámetros de la plantilla.