Después de terminar mi clase de C ++, me pareció que las estructuras / clases son prácticamente idénticas, excepto con algunas diferencias menores.
Nunca antes había programado en C; pero sé que tiene estructuras. En C, ¿es posible heredar otras estructuras y establecer un modificador de público / privado?
Si puede hacer esto en C normal, ¿por qué en el mundo necesitamos C ++? ¿Qué hace que las clases sean diferentes de una estructura?
Respuestas:
En C ++ , las estructuras y las clases son prácticamente iguales; la única diferencia es que cuando los modificadores de acceso (para variables miembro, métodos y clases base) en las clases son privados, los modificadores de acceso en estructuras son públicos.
Sin embargo, en C , una estructura es solo una colección agregada de datos (públicos) y no tiene otras características de clase: sin métodos, sin constructor, sin clases base, etc. Aunque C ++ heredó la palabra clave, extendió la semántica. (Sin embargo, esta es la razón por la que las cosas están predeterminadas en público en las estructuras: una estructura escrita como una estructura C se comporta como una).
Si bien es posible falsificar algunas OOP en C, por ejemplo, definir funciones que toman un puntero a una estructura como primer parámetro, u ocasionalmente coaccionar estructuras con los mismos primeros campos para que sean "sub / superclases", siempre es una especie de atornillado, y no es realmente parte del lenguaje.
fuente
Aparte de las diferencias en el acceso predeterminado (público / privado), no hay diferencia.
Sin embargo, algunas tiendas que codifican en C y C ++ usarán "class / struct" para indicar qué se puede usar en C y C ++ (struct) y cuáles son solo C ++ (class). En otras palabras, en este estilo todas las estructuras deben funcionar con C y C ++. Esta es la razón por la que había una diferencia en primer lugar hace mucho tiempo, cuando C ++ todavía se conocía como "C con clases".
Tenga en cuenta que las uniones de C funcionan con C ++, pero no al revés. Por ejemplo
Y de la misma manera
solo funciona en C
fuente
Voy a agregar a las respuestas existentes porque el C ++ moderno ahora es una cosa y se han creado Pautas básicas oficiales para ayudar con preguntas como estas.
Aquí hay una sección relevante de las pautas:
Los ejemplos de código dados:
Class
Funcionan bien para miembros que, por ejemplo, se derivan entre sí o están interrelacionados. También pueden ayudar con la comprobación de la cordura al crear una instancia.Struct
Los s funcionan bien para tener "bolsas de datos", donde en realidad no ocurre nada especial, pero los miembros lógicamente tienen sentido estar agrupados.A partir de esto, tiene sentido que
class
existan s para admitir la encapsulación y otros conceptos de codificación relacionados, para los questruct
simplemente no son muy útiles.fuente
struct
s son los más portátiles. Pueden ser utilizados por C o C ++ o de ida y vuelta. También se pueden descomprimir en Python usando elstruct
módulo, por ejemplo. Si sus prioriza los proyectos que sean compatibles con otros idiomas, interfaces o sistemas, prefierenstruct
másclass
. Para asuntos estrictamente internos del programa, prefieraclass
.No es posible definir funciones miembro o derivar estructuras entre sí en C.
Además, C ++ no es solo C + "derivar estructuras". Las plantillas, las referencias, los espacios de nombres definidos por el usuario y la sobrecarga de operadores no existen en C.
fuente
power
estructuras en C. ¿Entonces C ++ solo usa estructuras para ser compatibles con C?struct
me refiero a un tipo de cosa POD en gran medida pasiva.std::less
) se definen como estructuras, no como clases.Una diferencia más en C ++, cuando hereda una clase de la estructura sin ningún especificador de acceso, se convierte en herencia pública, mientras que en el caso de la clase es herencia privada.
fuente
C ++ utiliza estructuras principalmente para 1) compatibilidad con versiones anteriores de C y 2) tipos de POD. Las estructuras C no tienen métodos, herencia o visibilidad.
fuente
std::less
) se definen como estructuras, no como clases.