Frage

Ich habe in C ++ gehört, dass, einen Accessor (get...()) in einer Elementfunktion der gleichen Klasse mit denen die Accessor definiert wurden, sind zum guten Programmierstil? Ist es wahr, und es sollte getan werden?

Zum Beispiel ist dies bevorzugt:

void display() {
    cout << getData();
}

über so etwas wie folgt aus:

void display() {
    cout << data;
}

data ist ein Datum Mitglied derselben Klasse, in der Accessor definiert wurde ... gleiche mit dem display() Verfahren.

Ich bin der Ober Denken zu tun, dass vor allem, wenn Sie die Zugriffs viele Male in der gleichen Klasse aufrufen müssen, anstatt nur direkt das Datenelement verwendet.

War es hilfreich?

Lösung

Der Grund hierfür ist, dass, wenn Sie die Implementierung von getData() ändern, werden Sie nicht den Rest des Codes ändern müssen, die direkt data zugreift.

Und auch ein intelligenter Compiler wird es inline sowieso (es würde die Umsetzung innerhalb der Klasse immer wissen), so gibt es keine Leistungseinbuße ist.

Andere Tipps

Es hängt davon ab. eine Accessor-Funktion bietet eine Abstraktionsschicht, die sich auf zukünftige Änderungen vornehmen könnten ‚Daten‘ weniger schmerzhaft. Zum Beispiel, wenn Sie träge wollen, um den Wert von ‚Daten‘ berechnen, könnten Sie diese Berechnung in der Accessorfunktion verbergen.

Wie für den Overhead - Wenn Sie auf Leistungsaufwand beziehen, ist es wahrscheinlich unbedeutend sein wird - Ihr Accessoren wird mit ziemlicher Sicherheit inlined werden. Wenn Sie Codierung Overhead beziehen, dann ja, es ist ein Kompromiss, und Sie müssen entscheiden, ob es sich lohnt, den zusätzlichen Aufwand Accessoren zu bieten.

Ich persönlich glaube nicht, die Accessoren sind es wert in den meisten Fällen.

Ja, ich glaube, es bedingungslos getan mehr oder weniger werden soll. Wenn die Zustandsgröße in einem gewissen Basisklasse ist, sollte es mehr oder weniger immer privat sein. Wenn Sie es geschützt oder öffentlich erlauben werden, alle geerbt wird es direkt verwenden. Diese Klassen wiederum möglicherweise Klassen Ihre Mitarbeiter in einem anderen Projekt geschrieben haben. Wenn Sie plötzlich entscheiden, in der Basisklasse spotten über und Refactoring z.B. der Name der Variablen, um etwas mehr geeignet, alle Benutzer dieses Staates neu geschrieben werden müssen.

Dies ist wahrscheinlich kein Problem, wenn Sie der einzige Programmierer oder die Entwicklung von etwas Code sind, dass niemand jemals benutzen werden. Aber sobald die Anzahl von Unterklassen zu wachsen beginnen, könnte es wirklich haarig. Gotta love Transparenz!

Allerdings bin ich am bestes Kind auf diesem Planeten keine Götter. Manchmal betrügen ich;) Wenn Sie in der Eigentümer-Klasse sind, ich denke, es ist in Ordnung, direkt private Daten zugreifen zu können. Es könnte sogar von Vorteil sein, da Sie automatisch wissen, dass Sie die tatsächliche Klasse modifizieren in Sie sind. Vorausgesetzt, dass Sie irgendeine Art von Namenskonvention, die Sie tatsächlich so erzählt, z.B. einige Variablennamen mit einem Unterstrich am Ende: „somevariable _“

.

Cheers!

Nun, Herr Khunt, ist der Aufwand wirklich unbedeutend für Accessoren in den meisten Fällen. Die Frage ist, ob nicht die Zugriffslogik aufgerufen werden muss, oder die Sie direkten Zugriff auf das Feld benötigen. Das ist eine Frage für jede einzelne Anwendung, aber in vielen Fällen wird nicht viel Unterschied machen.

Der wahre Grund für Accessoren ist Kapselung Ihrer Felder zu anderen Klassen zur Verfügung zu stellen - und weniger über die enthaltenden Klasse

.

Ich persönlich ziehe nicht Dutzende von zusätzlichen Funktionen haben (erhalten und pro jedem Mitglied Variable). Ich würde mit nur Daten , und würde sich ändern, zu getData () nur bei Bedarf etwas anders zu machen. Da wir den Code über das Ändern nur in einer Klasse sprechen, sollte es nicht allzu schwierig sein.

Es hängt davon ab, was Sie letztlich mit Ihren Daten Mitglied tun könnten nehme ich an.

Durch die es bis in die Accessor Umwickeln Sie dann Dinge tun können, wie träge die Daten abrufen, wenn dies ein teurer Prozess war und nicht etwas, was Sie wollen tun, wenn jemand danach fragt. Auf der anderen Seite könnten Sie wissen, dass es immer ein stummer eingebauter Typ sein und so kann ich keinen Vorteil des Gehens durch einen Accessor dort sehen. Wie gesagt, es hängt von dem Element.

In meinen Augen ist der wichtigste Aspekt dieser Frage macht es, den Code besser lesbar und daher wartbar? Ich persönlich glaube nicht, dass es nicht so würde ich das nicht tun.
Sicherlich sollten Sie nie einen privaten Accessor fügen Sie einfach, dies zu tun, das wäre cnuts.

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