Diferencia entre estructuras C y estructuras C++

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();
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *