Analicemos cuáles son las diferencias entre las estructuras en C y las estructuras en C++. En C++, las estructuras son similares a las clases.
Diferencias entre las estructuras C y C++
Estructuras C |
Estructuras C++ |
---|---|
Solo se permiten miembros de datos, no puede tener funciones de miembro. | Puede contener tanto: funciones miembro como miembros de datos. |
No puede tener miembros estáticos. | Puede tener miembros estáticos. |
No puede tener un constructor dentro de una estructura. | Se permite la creación de constructores. |
La inicialización directa de miembros de datos no es posible. | Es posible la inicialización directa de miembros de datos. |
Es necesario escribir la palabra clave ‘struct’ para declarar variables de tipo estructura. | No es necesario escribir la palabra clave ‘struct’ para declarar variables de tipo estructura. |
No tiene modificadores de acceso. | Admite modificadores de acceso. |
Solo se permiten punteros a estructuras. | Puede tener punteros y referencias a la estructura. |
El operador Sizeof generará 0 para una estructura vacía. | El operador Sizeof generará 1 para una estructura vacía. |
La ocultación de datos no es posible. | La ocultación de datos es posible. |
Similitudes entre las estructuras C y C++
- Tanto en C como en C++, los miembros de la estructura tienen visibilidad pública por defecto.
Analicemos algunas de las diferencias y similitudes mencionadas anteriormente una por una:
1. Funciones miembro dentro de la estructura : las estructuras en C no pueden tener funciones miembro dentro de una estructura, pero las estructuras en C++ pueden tener funciones miembro junto con miembros de datos.
C
// C Program to Implement Member // functions inside structure #include <stdio.h> struct marks { int num; // Member function inside Structure to // take input and store it in "num" void Set(int temp) { num = temp; } // function used to display the values void display() { printf("%d", num); } }; // Driver Program int main() { struct marks m1; // calling function inside Struct to // initialize value to num m1.Set(9); // calling function inside struct to // display value of Num m1.display(); }
Producción
This will generate an error in C but no error in C++.
C++
// C++ Program to Implement Member functions inside // structure #include <iostream> using namespace std; struct marks { int num; // Member function inside Structure to // take input and store it in "num" void Set(int temp) { num = temp; } // function used to display the values void display() { cout << "num=" << num; } }; // Driver Program int main() { marks m1; // calling function inside Struct to // initialize value to num m1.Set(9); // calling function inside struct to // display value of Num m1.display(); }
num=9
2. Miembros estáticos: las estructuras C no pueden tener miembros estáticos, pero están permitidas en C++.
C
// C program with structure static member struct Record { static int x; }; // Driver program int main() { return 0; }
C++
// C++ program with structure static member struct Record { static int x; }; // Driver program int main() { return 0; }
Esto generará un error en C pero no en C++.
3. Creación de constructores en estructura: las estructuras en C no pueden tener un constructor dentro de una estructura, pero las estructuras en C++ pueden tener creación de constructores.
C
// C program to demonstrate that // Constructor is not allowed #include <stdio.h> struct Student { int roll; Student(int x) { roll = x; } }; // Driver Program int main() { struct Student s(2); printf("%d", s.x); return 0; }
C++
// CPP program to initialize data member in c++ #include <iostream> using namespace std; struct Student { int roll; Student(int x) { roll = x; } }; // Driver Program int main() { struct Student s(2); cout << s.roll; return 0; }
Esto generará un error en C.
Salida en C++:
2
4. Inicialización directa: no podemos inicializar directamente los miembros de datos de estructura en C, pero podemos hacerlo en C++.
C
// C program to demonstrate that direct // member initialization is not possible in C #include <stdio.h> struct Record { int x = 7; }; // Driver Program int main() { struct Record s; printf("%d", s.x); return 0; }
C++
// CPP program to initialize data member in c++ #include <iostream> using namespace std; struct Record { int x = 7; }; // Driver Program int main() { Record s; cout << s.x << endl; return 0; }
Esto generará un error en C.
Salida en C++:
7
5. Uso de la palabra clave struct: en C, necesitamos usar una estructura para declarar una variable de estructura. En C++, una estructura no es necesaria. Por ejemplo, supongamos que haya una estructura para Record. En C, debemos usar «struct Record» para las variables Record. En C++, no necesitamos usar struct, y usar ‘Record’ solo funcionaría.
6. Modificadores de acceso: las estructuras C no tienen modificadores de acceso ya que estos modificadores no son compatibles con el lenguaje. Las estructuras de C++ pueden tener este concepto ya que está integrado en el lenguaje.
7. Punteros y referencias: en C++, puede haber tanto punteros como referencias a una estructura en C++, pero en C solo se permiten punteros a estructuras.
8. Operador sizeof: Este operador generará 0 para una estructura vacía en C mientras que 1 para una estructura vacía en C++.
C
// C program to illustrate empty structure #include <stdio.h> // empty structure struct Record { }; // Driver Code int main() { struct Record s; printf("%lu\n", sizeof(s)); return 0; }
C++
// C++ program to illustrate empty structure #include <iostream> using namespace std; // empty structure struct Record { }; // Driver program int main() { struct Record s; cout << sizeof(s); return 0; } // This code is contributed by Shubham Sharma
Salida en C:
0
Salida en C++:
1
NOTA: El tipo predeterminado de sizeof es long unsigned int, por eso se usa «%lu» en lugar de «%d» en la función printf.
9. Ocultación de datos: las estructuras C no permiten el concepto de ocultación de datos, pero están permitidos en C++, ya que es un lenguaje orientado a objetos, mientras que C no lo es.
10 _ Miembros constantes: la estructura C puede permitir declarar miembros constantes, pero no hay forma de inicializar. Pero en C++, puede inicializar usando la lista de inicializadores del constructor
C
#include <stdio.h> struct C_struct { const int i; int k; }; int main() { printf("Struct with constant members, but how to init??"); return 0; }
C++
#include <iostream> using namespace std; struct Cpp_Struct { public: const int i; int k; Cpp_Struct():i(2),k(3){} }; int main() { Cpp_Struct obj1; printf("Struct with constant members, %d, %d", obj1.i, obj1.k); return 0; }
Artículo relacionado: Estructura frente a clase en C++
Este artículo es una contribución de Shubham Chaudhary . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA