2010-02-11 43 views
37

¿Podría alguien decirme cuál es la principal diferencia entre C & C++ estructuras.C estructura y C++ estructura

+10

C no pueden contener métodos mientras que las estructuras de C++ puede :) – vpram86

+0

estructuras C se utilizan básicamente para agrupar los datos. – Ashish

+2

C++ estructuras admiten herencia. :) –

Respuesta

60

En C++ struct y class son exactamente lo mismo, a excepción de que struct por defecto public de visibilidad y de clase por defecto private del visiblity.

En C, nombres struct están en su propio espacio de nombres, por lo que si usted tiene struct Foo {};, tiene que escribir struct Foo foo; para crear una variable de ese tipo, mientras que en C++ se puede escribir simplemente Foo foo;, aunque también se permite el estilo C . Los programadores de C usualmente usan typedef struct {} Foo; para permitir la sintaxis de C++ para las definiciones de las variables.

El lenguaje de programación C tampoco admite restricciones de visibilidad, funciones de miembros o herencia.

+4

En C++ los nombres de las estructuras también están en su propio espacio de nombres. La diferencia es que al buscar un identificador, el compilador buscará primero en el espacio de nombre general, y si no lo encuentra, también comprobará el espacio de nombre de las clases definidas por el usuario. En C++, su es correcto: 'struct x {}; void x() {} 'mientras que esto no es' typedef struct x {} x; void x() {} ', como el espacio identificador global ya tiene un' x' (typedef), la declaración de la función colisionará (Por cierto, en el primer ejemplo, para crear una variable necesitas escribir 'struct x var' de modo que el identificador solo se busca como un tipo definido por el usuario). –

9

En C++, las estructuras se comportan como clases, permitiendo métodos, constructores, destructores, etc ...

La principal diferencia entre clases y estructuras de C++ es que todo el interior de las estructuras es pública por defecto, mientras que todo el interior de las clases es privado de forma predeterminada. (Es decir: nada fuera puede acceder a ellos directamente)

+9

De acuerdo con mi CS prof, otra diferencia entre structs y classes es "no se puede fallar una estructura" –

1

C estructuras es más parecido a una definición de una estructura de datos compuesta

estructuras

C++ pueden ser considerados como una clase, pero el alcance de todas las variables de los miembros de incumplido al público .

2

Además de las respuestas anteriores, recuerde que las estructuras C++ admiten herencia y, por lo tanto, pueden contener punteros a vtables. Esto puede marcar una gran diferencia al serializar y deserializar estas estructuras en todos los procesos. Las plantillas son compatibles también.

+0

En lugar de mencionar los vtables (que no están en la especificación del lenguaje C++), debe mencionar los métodos 'virtuales'. –

+0

El mejor proceso para serializar y deserializar estructuras es tener una funcionalidad que acceda a los campos de datos (miembros) individualmente. Se aplica a los idiomas C y C++. Una razón principal es que el compilador tiene permitido agregar relleno entre los miembros (se aplica a ambos idiomas). –

+0

En C, el relleno es solo una cuestión de unos pocos bytes no utilizados cuando los datos se serializan y se deserializan en su representación binaria. Con C++, puede crear problemas al usar objetos de clases con funciones virtuales. –

3

C: no podemos definir la función dentro de la estructura en c.

C++: Podemos definir la función dentro de la estructura en C++.

1

hay varias diferencias en la estructura de C y C++

  1. En C definimos la palabra clave struct es necesario crear el valor de tipo de estructura, mientras que en C++ no es necesario.

  2. En C no hay ninguna función dentro de la estructura, mientras que en C++ podemos definir la función que pueden acceder los miembros de datos de la estructura directamente (función es nombres como método en C++)

  3. no existe el concepto de acceso modificador dentro de la estructura en C, mientras que en C++ podemos encontrar el modificador de acceso (por ejemplo, privado y público). Por defecto, todos son públicos.

  4. La estructura en C no puede tener miembros estáticos, mientras que en C++ la estructura puede tener miembros estáticos.

  5. El tamaño de la estructura vacía es la violación de la restricción en C, pero siempre es 1 en C++.

  6. Podemos tener tanto punteros como referencias a struct en C++, pero solo se permiten punteros a las estructuras.(Referencias no son función del lenguaje C) estructuras

+0

¿Puedes explicar el punto 1? Entendí lo que querías decir aquí. – user3728501

+0

En C tenemos que escribir la palabra clave struct cuando declaramos una variable del tipo de estructura. Ejemplo: Struct ABC var1, var2; Mientras que C++ se acerca para minimizar la brecha entre el tipo de datos derivados y el tipo de datos incorporado. Entonces, como definimos int o char, aquí podemos declarar la variable de estructura directamente como: Ejemplo: ABC var1, var2; –

+0

Ah bien sí Entiendo que quisiste decir, también debes escribir struct para declarar nuevas variables – user3728501