So, jetzt können struct virtuelle haben Funktion und Unterstützung Vererbung? Was dann mit Klassen Unterschied? Was der wahre Zweck der Information Hiding? [Duplikat]

StackOverflow https://stackoverflow.com/questions/3845564

Frage

  

Mögliche Duplizieren:
   Was sind die Unterschiede zwischen Struktur und Klasse in C ++

http://www.cplusplus.com/reference/std/typeinfo/ type_info /

Ich denke, meine „Lehrer“ habe mich nicht viel über die Unterschiede zwischen Struktur und Klassen in C ++.

ich in einer anderen Frage gelesen, dass Vererbung über, struct standardmäßig öffentlich sind ... Ich denke, struct auch nicht über Konstruktoren / Destruktoren ...

Was sind die anderen Unterschiede dann? Haben sie, dass viel von Bedeutung?

Und wenn es um private / geschützte Attribute / Methoden sprechen, sind sie zur Laufzeit nicht zugänglich, nur weil der Compiler es so bei der Kompilierung erzählt und meldet einen Fehler, nicht wahr? Dann vergleicht diese Funktionen mit Klassen, was bedeutet „Information Hiding“ wirklich an den Programmierer zu bringen? Ist es hier so, dass, wenn jemand die Wiederverwendung der Klasse, diese Person nicht die Klasse missbrauchen, weil die privaten / geschützten Sachen vom Compiler gemeldet werden?

Ich kämpfe immer noch mit dem eigentlichen Zweck der Information Hiding, es will noch Ton in meinem Kopf, wie es mehr Sicherheit in Programmen bringt, weniger Sicherheitslücken bedeutet, aber ich bin wirklich über das Ziel einer solchen Konstruktion in der Sprache verwechselt ... (und ich nicht die Absicht, gegen C sein ++ in irgendeiner Weise, die ich in was Fällen nur zu verstehen, dieses Feature interessant sein kann oder nicht, wenn nicht, das ist kein Problem, aber ich mag nur wissen ... ).

War es hilfreich?

Lösung

Was den Compiler angeht, so gibt es keinen Unterschied zwischen struct und class anders als der Standard Zugänglichkeit. Sie sind nur zwei verschiedene Schlüsselwörter für die gleiche Sache zu definieren. So können Strukturen haben Konstrukteure, Destruktoren Basisklassen, virtuelle Funktionen, alles.

Was Programmierer betroffen ist, ist es eine gemeinsame Konvention zur Verwendung struct für Klassen und bei jedem dieser Dinge (genauer gesagt, die POD ) oder sogar noch weiter und Verwendung struct nur für Klassen ohne benutzerdefinierte Elementfunktionen überhaupt, nur öffentliche Daten Mitglieder zu gehen. Menschen manchmal verwirren diese Konvention, denn es ist überraschend einfach eine Klasse zu denken POD ist, wenn es nicht ist, aber zumindest sie versuchen.

In C ++, zumindest ist Information Hiding absolut nichts mit Sicherheit zu tun. Setzen Sie dieses Recht aus dem Kopf. Es spielt keine Sicherheit, es sei denn in der gleichen allgemeinen Art und Weise, dass jeder gute Praxis für den Code macht Codierung, die etwa auf Grund einfacher und damit Programmierer machen wenige Fehler.

Der Zweck der Information Hiding ist, damit Sie die Implementierung später ändern, vielleicht private Mitglieder, in dem sicheren Wissen, dass keiner der Benutzer Ihrer Klasse zu löschen umzubenennen, außerhalb der Klasse selbst und Freunde, um sie bezieht . Offensichtlich ist es nützlich, genau das zu tun, aber weniger offensichtlich und vielleicht noch wichtiger ist, seine sehr nützlich, da es im Code explizit macht, was Ihre Klasse-Schnittstelle ist, dass Sie will Kunden zu nutzen, und dass die Benutzer des Klasse kann zu Recht auf Arbeit erwarten. Sie können die gleiche Sache im Prinzip mit der Dokumentation erreichen, aber es ist schön für den Compiler zu erzwingen die Regeln.

in der Praxis

Es ist nicht „sicher“, weil an einem bestimmten Compiler es möglich ist, zu arbeiten rund um die öffentlichen / privaten Schutz. Aber wenn die Benutzer Ihrer Klasse das tun, sind sie etwas grotesk Hack, verdienen sie für ihren Code kompilieren zu stoppen / zu arbeiten, wenn Sie Ihre Klasse ändern, und wenn sie zu dir kommen zu beschweren Sie über sie lachen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top