C auf eingebetteten Systemen verwendet traditionell Strukturen, um strukturierte Daten zu speichern.
Arduino bringt C ++ auf den Tisch, sodass wir stattdessen Klassen verwenden können.
Nehmen wir an, wir haben zwei unterschiedliche Datenstrukturen, die als sehr ähnlich angesehen werden könnten:
typedef struct
{
int valueOne;
int valueTwo;
int valueThree;
} value_t;
und:
class Value
{
public:
int valueOne;
int valueTwo;
int valueThree;
}
Welchen Unterschied wird dies in Bezug auf das Gedächtnis machen?
Ich sehe immer noch, dass die Strukturtechnik stark genutzt wird - warum ist das so?
programming
c++
struct
class
Cybergibbons
quelle
quelle
struct
undclass
außer der Standardsichtbarkeitstruct
s verwendet werden , vor allem , weil die große Mehrheit der Embedded - Hardware in C codiert, so dass jeder, der wahrscheinlich viel Zeit das Schreiben von Code für kleine MCUs verbringt weiß C viel besser als C ++ und automatisch erreicht für C Idiome vor C ++ Idiome. Es ist ein Leistungsproblem des Programmierers .Antworten:
Wie aus der akzeptierten Antwort von Wann sollten Sie eine Klasse gegen eine Struktur in C ++ verwenden?
In Bezug auf den Arbeitsspeicher spielt der Zugriffsmodifikator keine Rolle. Angesichts der Speicherbeschränkungen des Arduino ist es weniger wahrscheinlich, dass Benutzer Klassen mit komplexen Hierarchien verwenden, bevorzugen jedoch die POD-Strukturen.
quelle
Im Gegensatz zu C ist eine Instanz von a
struct
in C ++ ein Objekt genauso wie eine Instanz von aclass
. Aus der Sicht des kompilierten Codes sind sie identisch. Speicherbelegung, Ausrichtung, Zugriffszeiten usw. sind exakt gleich (dh es entstehen keine Overheads).Aus Sicht des Programmierers gibt es einen sehr kleinen Unterschied. Mitglieder von
struct
haben standardmäßig eine öffentliche Sichtbarkeit, während Mitglieder von standardmäßig eineclass
private Sichtbarkeit haben. Andernfalls funktionieren alle Sprachfunktionen auf beiden Systemen gleich, z. B. Konstruktoren / Destruktoren, Vererbung, Polymorphismus, Vorlagen und Überladung von Operatoren. Sie können sogar astruct
von a ableitenclass
und umgekehrt.Trotz der Ähnlichkeit ist es durchaus üblich, dass
struct
Benutzer bei sehr einfachen Strukturen absichtlich a in C ++ verwenden, z. B. wenn es nur aus wenigen Datenelementen, aber keinen Funktionen besteht. Aclass
würde für alles Komplexere verwendet werden. Dies ist jedoch nur eine Frage der Konvention oder der persönlichen Präferenz und kann als subtiler Hinweis auf die beabsichtigte Komplexität der Struktur verwendet werden.quelle
Wie andere Antworten gezeigt haben, ist Ihre Leistung besonders
struct
undclass
nicht unterscheidbar (es gibt geringfügige Unterschiede in den Gültigkeitsbereichen der Typnamen aufgrund der Art und Weise, wie Sie Ihre Struktur definiert haben). Die Abgrenzung in C ++ erfolgt nicht zwischenstruct
undclass
, sondern zwischen Typen, die POD (einfache alte Daten) sind, und Typen, die es nicht sind, wie in dieser Diskussion erläutert .quelle
Keiner. Strukturen und Klassen sind dasselbe, unterscheiden sich nur in den Schutzstufen, und durch die Instanziierung wird entweder ein 'Objekt' erstellt.
Weniger tippen, wenn Sie nicht versuchen, Datenelemente auszublenden.
quelle
Beachten Sie, dass
ist in C ++ veraltet und sollte nur verwendet werden
Es ist in den Antworten nicht sehr klar, aber der andere Effekt von Strukturen ist standardmäßig die öffentliche Vererbung gegenüber der privaten Vererbung mit Klassen.
Wie von anderen erwähnt, ist die Verwendung von struct im Allgemeinen eine Konvention für POD-Typen.
Auch technisch gesehen sollte "struct vs object" "struct vs class" sein (da das Instanziieren einer Struktur oder einer Klasse immer noch ein Objekt ergibt).
quelle