En C++, una estructura funciona de la misma manera que una clase, excepto por dos pequeñas diferencias. El más importante de ellos es ocultar los detalles de implementación. Por defecto, una estructura no ocultará sus detalles de implementación a quien la use en el código, mientras que una clase por defecto ocultará todos sus detalles de implementación y, por lo tanto, evitará que el programador acceda a ellos. La siguiente tabla resume todas las diferencias fundamentales.
Clase |
Estructura |
---|---|
Los miembros de una clase son privados por defecto. | Los miembros de una estructura son públicos por defecto. |
Las clases/estructuras base de una clase son privadas de forma predeterminada. | Las clases/estructuras base de una estructura son públicas de forma predeterminada. |
Se declara usando la palabra clave class . | Se declara usando la palabra clave struct . |
es tipo referencia | Es tipo valor. |
Se utiliza para la abstracción de datos y la herencia adicional. | Se utiliza para agrupar datos. |
Puede tener valores NULL | No puede tener valores NULL. |
Puede tener todos los tipos de constructores y destructores. | Puede tener solo un constructor parametrizado. |
Algunos ejemplos que profundizan en estas diferencias:
1) Los miembros de una clase son privados por defecto y los miembros de una estructura son públicos por defecto.
Por ejemplo, el programa 1 falla en la compilación pero el programa 2 funciona bien,
Programa 1:
C++
// Program 1 // C++ Program to demonstrate that // Members of a class are private // by default using namespace std; class Test { // x is private int x; }; int main() { Test t; t.x = 20; // compiler error because x // is private return t.x; }
Producción:
prog.cpp: In function ‘int main()’: prog.cpp:8:9: error: ‘int Test::x’ is private int x; ^ prog.cpp:13:7: error: within this context t.x = 20; ^
Programa 2:
C++
// Program 2 // C++ Program to demonstrate that // members of a structure are public // by default. #include <iostream> struct Test { // x is public int x; }; int main() { Test t; t.x = 20; // works fine because x is public std::cout << t.x; }
20
2) Una clase se declara con la palabra clave class y una estructura se declara con la palabra clave struct.
Sintaxis:
class ClassName { private: member1; member2; public: member3; . . memberN; };
Sintaxis:
struct StructureName { member1; member2; . . . memberN; };
3) La herencia es posible con clases y con estructuras.
Por ejemplo, los programas 3 y 4 funcionan bien.
Programa 3:
C++
// Program 3 // C++ program to demonstrate // inheritance with classes. #include <iostream> using namespace std; // Base class class Parent { public: int x; }; // Subclass inheriting from // base class (Parent). class Child : public Parent { public: int y; }; int main() { Child obj1; // An object of class Child has // all data members and member // functions of class Parent. obj1.y = 7; obj1.x = 91; cout << obj1.y << endl; cout << obj1.x << endl; return 0; }
7 91
Programa 4:
C++
// Program 4 // C++ program to demonstrate // inheritance with structures. #include <iostream> using namespace std; struct Base { public: int x; }; // is equivalent to // struct Derived : public Base {} struct Derived : Base { public: int y; }; int main() { Derived d; // Works fine because inheritance // is public. d.x = 20; cout << d.x; cin.get(); return 0; }
Producción
20
Debe leer: Diferencia entre estructuras C y estructuras C++
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido 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