Struct Vererbung vs-Klasse Vererbung in C++
Ich habe gerade entdeckt, aus dieser F/A, die Strukturen sind vererbbar in C++, aber, ist es eine gute Praxis, oder ist es vorzuziehen, die Verwendung von Klassen? In welchen Fällen vorzuziehen ist und in welche nicht?
Habe ich noch nie gebraucht, aber jetzt habe ich einen Haufen Meldungen von verschiedenen Arten, aber gleiche Länge. Ich habe Sie in Binärdatei in ein char-array, und ich nur kopieren mit memcpy, um die Struktur zu füllen und die Felder (ich weiß nicht, ob es überhaupt möglich ist, es zu tun mit std::copy).
Ich denke, es wäre toll, in der Lage zu Erben, jede Struktur aus einer Basis-Struktur mit common-Header, das ist der Grund, warum ich gesucht. So eine zweite Frage wäre: wenn ich das mit Klassen, ist es auch möglich, eine memcpy (oder std:Kopie) aus einem Puffer zu einer Klasse?
- In C++ Strukturen und Klassen sind fast die gleichen, der einzige Unterschied ist, dass für
struct
die Standard-Sichtbarkeit istpublic
während für Klassen esprivate
. - Was planen Sie, um in der Basis zu struct?
- Es gibt noch einen weiteren Unterschied zwischen
class
undstruct
, die auf Vererbung speziell: Der Standard-Modus der Vererbung istprivate
mitclass
, aberpublic
mitstruct
. Also, wenn Siestruct D : A
ist, wird dies die gleiche wiestruct D : public A
. Aber das nicht aufhören, sollten Sie das übernahmekonzept mitstruct
natürlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ob Sie eine bitweise Kopie ist oder nicht, hat nichts zu tun mit der
struct
oderclass
tag und nur davon abhängig, ob diesestruct
oderclass
is_trivially_copiable
. Ob Sie sind, ist in der Norm definiert (9/6 [- Klasse]) und es im Grunde hinausläuft, um nicht zu erklären, keine anderen speziellen member-Methoden als Konstruktoren.Die bitweise Kopie ist dann erlaubt, von der Standard-in 3.9/2 [basic.Arten]
Hinweis: eine bitweise Kopie der padding-bytes führt zu Berichte in Valgrind.
Mit
std::copy
zu den gleichen Effekt:pack(1)
wird,pack(2)
auch nicht) auf Kosten der Richtigkeit. Allerdings padding-bytes werden eingeführt, um Respekt Ausrichtung Einschränkungen auf die Arten, so entfernen Sie entspricht einem Verstoß gegen diese Einschränkungen. Auf x86-Systemen funktioniert der code, aber der Zugang zu der mis-aligned Teile werden langsamer (die CPU muss zusätzliche Arbeit); auf einigen Architekturen ein hardware-Ausnahme kann ausgelöst werden (Absturz des Programms). verwenden Sie es nicht.char
array und legen Sie jedes Feld der Struktur angemessen (und zurück). Dies ist in der Regel mit dem Namen Serialisierung. Die optimierten ein, die stark Plattform-abhängig und erfordern eine neue Struktur für jede neue version des Protokolls ist die Verwendung von bit-Felder.Der einzige Unterschied zwischen
struct
undclass
ist der Standard-zugriffsmodifizierer für seine Mitglieder. Instruct
espublic
und inclass
esprivate
(bis anders angegeben). Außerdemstruct
undclass
sind identisch in C++.Manchmal Strukturen werden bevorzugt für PDO (Nur-Daten-Objekte) Klassen für die Lesbarkeit, aber das ist wirklich bis zu einem coding-convention.