Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

Estructuras y clases en C ++

C ++ continúa siendo un lenguaje minoritario para el desarrollo integrado, pero los desarrolladores lo adoptan comúnmente cuando los proyectos se vuelven demasiado grandes para que C se pueda usar de manera eficiente. Estos desarrolladores suelen realizar la transición de C a C ++ y las sutiles diferencias entre los lenguajes representan una parte importante de su curva de aprendizaje. C ++ tiene estructuras, como C, porque no son iguales. C ++ tiene clases que son notablemente similares a las estructuras. Este artículo desglosa los detalles de estos elementos del lenguaje.

Estructuras en C

Una estructura en C es un elemento (objeto) de datos compuestos personalizados, que se puede construir a partir de los tipos de datos integrados existentes ( int , char , etc.), campos de bits (números enteros de un tamaño de bits especificado) y otras estructuras. La idea es agregar varios elementos de datos que van juntos. Por ejemplo, una estructura para contener coordenadas tridimensionales podría verse así:

 coordenadas de la estructura {float x; flotar y; flotar z;}; 

Este código le dice al compilador qué coordenadas de estructura parece. Luego puede declarar variables de este tipo así:

 ubicación de coordenadas de estructura; 

La variable ubicación es de tipo coordenadas de estructura y sus campos internos pueden direccionarse mediante el operador "punto":

 ubicación.x =1.0; ubicación.y =2.0; ubicación.z =9.99; 

Por supuesto, se podría lograr un efecto similar usando tres flotadores separados variables con nombres como ubicación_x etc. Sin embargo, es mucho más fácil controlar la ubicación como una única variable que se puede pasar a funciones, etc.

La capacidad de incluir campos de bits otorga a las estructuras una capacidad que no está disponible en ninguna otra parte de C. Aquí hay un ejemplo:

 struct bitreg {unsigned up:3; sin firmar:3; polaridad sin firmar:2;}; 

Cada uno de los campos de una variable de tipo struct bitreg tiene un tamaño de bit específico. El compilador se asegura de que los datos se almacenen de manera sensata, por lo que esperaríamos que dicha variable encajara en un byte. Además, todo el código de "bit bashing" para acceder a los campos dentro del byte se genera automáticamente. Entonces, el programador simplemente puede acceder a ellos así:

 control struct bitreg; control.up =1; control.down =2; control.polarity =3; 

En su mayor parte, el uso de estructuras en C es bastante sencillo y hace que el código sea más fácil de entender sin impacto en la eficiencia de ejecución. Sin embargo, hay dos puntos que los desarrolladores integrados deben tener en cuenta:

Aunque una estructura en C se parece un poco a un nuevo tipo de datos, en realidad no lo es. Un tipo de datos normalmente tendría un rango de operaciones que se pueden realizar en él; este no es el caso de una estructura C. Para hacer algo en una estructura C, además de hacer un puntero, debe acceder a los campos internos. Este asunto se trata en C ++.

Clases en C ++

El lenguaje C ++ tiene una serie de capacidades orientadas a objetos. Uno de ellos es el concepto de clase , que permite la descripción de algo mucho más parecido a un nuevo tipo de datos. Una variable (normalmente llamada objeto ) se puede instanciar de la clase; es decir, es un objeto de este nuevo tipo.

Una clase C ++ tiene casi exactamente la misma sintaxis que una estructura C y algunas capacidades muy similares. Sin embargo, existen algunas diferencias importantes:

La mayoría de estas características se ilustran en este ejemplo:

 clase myclass {char a; int b; public:void fun (); mi clase(); ~ myclass ();}; myclass myobj; myobj.fun (); 

Las variables miembro a y b solo se puede acceder a las tres funciones miembro fun () , myclass () y ~ myclass () . Las dos últimas funciones son el constructor y el destructor. Solo divertido () es probable que se llame mediante el código de usuario. El código real para las tres funciones se definiría en otro lugar asociado con la clase mediante :: operador, así:

 void myclass ::fun () {... 

Estructuras en C ++

Además de las clases, C ++ tiene estructuras que son compatibles con versiones anteriores de C. Sin embargo, una estructura de C ++ también tiene las mismas capacidades adicionales que poseen las clases. Hay una sola diferencia entre una estructura y una clase en C ++. La accesibilidad predeterminada de las funciones y variables miembro en una clase es privada, como hemos visto; el valor predeterminado en una estructura es público. Por lo tanto, la funcionalidad de la clase anterior también podría expresarse así:

 struct mystruct {void fun (); mi clase(); ~ myclass (); privado:char a; int b;}; 

Uso de clases y estructuras en C ++

Una vez que haya adquirido esta información, se le insta a no explotarla demasiado. Hay muchas razones para usar solo estructuras para el tipo de funcionalidad que ofrecen en C y clases cuando necesita capacidades adicionales. Principalmente, se trata de una cuestión de legibilidad del código. Otro desarrollador puede no ser tan claro en los detalles y el código escrito de una manera "no estándar" será confuso.

Una prioridad clave cuando escribe código es asegurarse de que sea legible (=mantenible). Alguien, podría ser usted, podría necesitar ver este código dentro de un año y comprender lo que hace. Algunos consejos:suponga que la persona que mantendrá su código es un psicópata armado, que tiene poca paciencia y conoce la dirección de su casa.


Incrustado

  1. Variables, literales y constantes de C++
  2. Clases y objetos de C++
  3. Gestión de memoria C++:nuevo y eliminar
  4. Herencia pública, protegida y privada de C++
  5. Semáforos:servicios públicos y estructuras de datos
  6. Grupos de indicadores de eventos:servicios públicos y estructuras de datos
  7. Java - Objeto y Clases
  8. Clases de almacenamiento en C++
  9. C++ Fecha y hora
  10. Estructuras de datos de C++
  11. Sobrecarga de C++ (operador y función)