Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Strukturen und Klassen in C++

C++ ist nach wie vor eine Minderheitensprache für die eingebettete Entwicklung, wird jedoch häufig von Entwicklern übernommen, wenn Projekte zu groß werden, um C effizient nutzen zu können. Diese Entwickler wechseln normalerweise von C zu C++ und die feinen Unterschiede zwischen den Sprachen machen einen wesentlichen Teil ihrer Lernkurve aus. C++ hat Strukturen wie C, da sie nicht gleich sind. C++ hat Klassen, die Strukturen bemerkenswert ähnlich sind. Dieser Artikel entnimmt die Details dieser Sprachelemente.

Strukturen in C

Eine Struktur in C ist ein angepasstes, zusammengesetztes Datenelement (Objekt), das aus den vorhandenen integrierten Datentypen (int , char , etc.), Bitfelder (Ganzzahlen der angegebenen Bitgröße) und andere Strukturen. Die Idee ist, mehrere zusammengehörende Datenelemente zu aggregieren. Eine Struktur zur Aufnahme von dreidimensionalen Koordinaten könnte beispielsweise so aussehen:

Strukturkoordinaten{   float x; schweben y; float z;};

Dieser Code teilt dem Compiler mit, was für ein Strukturkoordinaten sieht aus wie. Sie können dann Variablen dieses Typs wie folgt deklarieren:

Ort der Koordinaten strukturieren;

Die Variable Standort ist vom Typ Strukturkoordinaten und seine internen Felder können mit dem „Punkt“-Operator adressiert werden:

location.x =1,0;location.y =2,0;location.z =9,99;

Ein ähnlicher Effekt könnte natürlich mit drei separaten Float erzielt werden Variablen mit Namen wie location_x usw. Es ist jedoch viel einfacher, mit Standort umzugehen als einzelne Variable, die an Funktionen usw. übergeben werden kann.

Die Fähigkeit, Bitfelder einzuschließen, verleiht Strukturen eine Fähigkeit, die anderswo in C nicht verfügbar ist. Hier ist ein Beispiel:

struct bitreg{   unsigned up:3; unsigniert:3; vorzeichenlose Polarität:2;};

Jedes der Felder in einer Variablen vom Typ struct bitreg hat eine bestimmte Bitgröße. Der Compiler sorgt dafür, dass die Daten sinnvoll gespeichert werden, sodass wir erwarten würden, dass eine solche Variable in ein Byte passt. Darüber hinaus wird der gesamte „Bit-Bashing“-Code für den Zugriff auf die Felder innerhalb des Bytes automatisch generiert. Der Programmierer kann also einfach so darauf zugreifen:

struct Bitreg-Steuerung; control.up =1;control.down =2;control.polarity =3;

Die Verwendung von Strukturen in C ist größtenteils recht einfach und macht den Code leichter verständlich, ohne die Ausführungseffizienz zu beeinträchtigen. Es gibt jedoch zwei Punkte, die Embedded-Entwickler beachten sollten:

Obwohl eine C-Struktur ein wenig wie ein neuer Datentyp aussieht, ist sie es nicht wirklich. Ein Datentyp verfügt normalerweise über eine Reihe von Operationen, die darauf ausgeführt werden können; dies ist bei einer C-Struktur nicht der Fall. Um etwas mit einer C-Struktur zu tun, außer einen Zeiger darauf zu setzen, müssen Sie auf die internen Felder zugreifen. Diese Angelegenheit wird in C++ behandelt.

Klassen in C++

Die Sprache C++ hat eine Reihe von objektorientierten Fähigkeiten. Eine davon ist das Konzept einer Klasse , die die Beschreibung eines neuen Datentyps ermöglicht. Eine Variable (normalerweise als Objekt bezeichnet ) kann instanziiert sein aus der Klasse; d.h. es ist ein Objekt dieses neuen Typs.

Eine C++-Klasse hat fast genau dieselbe Syntax wie eine C-Struktur und einige sehr ähnliche Fähigkeiten. Es gibt jedoch einige wichtige Unterschiede:

Die meisten dieser Funktionen werden in diesem Beispiel veranschaulicht:

class myclass{   char  a; int   b;public:   void fun(); meine Klasse(); ~meineKlasse();}; myclass myobj; myobj.fun();

Die Mitgliedsvariablen a und b sind nur für die drei Mitgliedsfunktionen fun() . zugänglich , myclass() und ~myclass() . Die letzten beiden Funktionen sind der Konstruktor und der Destruktor. Nur Spaß() wird wahrscheinlich per Benutzercode aufgerufen. Der eigentliche Code für alle drei Funktionen würde an anderer Stelle definiert werden mit der Klasse verknüpft mit dem :: Operator, also:

void myclass::fun(){  ...

Strukturen in C++

Neben Klassen verfügt C++ über Strukturen, die mit C abwärtskompatibel sind. Eine C++-Struktur hat jedoch auch dieselben zusätzlichen Fähigkeiten, die Klassen besitzen. Das ist nur ein einziger Unterschied zwischen einer Struktur und einer Klasse in C++. Der Standardzugriff auf Member-Variablen und -Funktionen in einer Klasse ist, wie wir gesehen haben, privat; der Standardwert in einer Struktur ist öffentlich. Somit könnte die Funktionalität der früheren Klasse auch so ausgedrückt werden:

struct mystruct{   void fun(); meine Klasse(); ~myclass();private:   char  a; int   b;};

Klassen und Strukturen in C++ verwenden

Nachdem Sie diese Informationen erhalten haben, sollten Sie sie nicht zu stark ausnutzen. Es gibt viele Gründe, Strukturen nur für die Art von Funktionalität zu verwenden, die sie in C und Klassen bieten, wenn Sie die zusätzlichen Fähigkeiten benötigen. In erster Linie geht es um die Lesbarkeit des Codes. Ein anderer Entwickler ist möglicherweise nicht so klar in den Details und Code, der auf „nicht standardmäßige“ Weise geschrieben wurde, wird verwirrend sein.

Eine Schlüsselpriorität beim Schreiben von Code besteht darin, sicherzustellen, dass er lesbar (=wartbar) ist. Jemand – das könnten Sie sein – muss sich diesen Code vielleicht in einem Jahr ansehen und verstehen, was er tut. Einige Ratschläge:Nehmen Sie an, dass die Person, die Ihren Code verwaltet, ein bewaffneter Psychopath ist, der nur begrenzte Geduld hat und Ihre Privatadresse kennt.


Eingebettet

  1. C++-Variablen, Literale und Konstanten
  2. C++-Klassen und -Objekte
  3. C++-Speicherverwaltung:neu und löschen
  4. Öffentliche, geschützte und private Vererbung in C++
  5. Semaphoren:Versorgungsdienste und Datenstrukturen
  6. Ereigniskennzeichengruppen:Versorgungsdienste und Datenstrukturen
  7. Java - Objekt und Klassen
  8. Speicherklassen in C++
  9. C++ Datum und Uhrzeit
  10. C++-Datenstrukturen