371 Stimmen

Was ist der Unterschied zwischen privaten und geschützten Mitgliedern von C++-Klassen?

Was ist der Unterschied zwischen private y protected Mitglieder in C++-Klassen?

Aus den Best-Practice-Konventionen weiß ich, dass Variablen und Funktionen, die nicht außerhalb der Klasse aufgerufen werden, zu private -aber wenn ich mir mein MFC-Projekt ansehe, scheint MFC zu bevorzugen protected .

Was ist der Unterschied und welche sollte ich verwenden?

0 Stimmen

Wenn Sie eine Bibliothek entwerfen, ist jedes geschützte (und nicht private) Mitglied eine Belastung. Wenn Sie bei internen Klassen alles, was nicht öffentlich ist, geschützt machen, sparen Sie Zeit und müssen weniger Klassen überarbeiten, um ein Mitglied von privat in geschützt zu ändern.

6voto

fhe Punkte 5967

Attribute und Methoden, die als protected sind - im Gegensatz zu privaten - auch in Unterklassen sichtbar.

Es sei denn, Sie wollen die Methode in möglichen Unterklassen nicht verwenden oder die Möglichkeit bieten, sie zu überschreiben, würde ich sie zu private .

3 Stimmen

Eine abgeleitete Klasse kann die privaten virtuellen Funktionen der Basisklasse außer Kraft setzen

6voto

xtofl Punkte 39285

Schauen Sie sich doch mal die Geschützte Mitgliedsvariablen Frage. Es wird empfohlen, standardmäßig private zu verwenden (genau wie bei C++ class ses do), um die Kopplung zu reduzieren. Geschützte Mitgliedsvariablen sind fast immer eine schlechte Idee, geschützte Mitgliedsfunktionen können z.B. für das Muster der Schablonenmethode verwendet werden.

0 Stimmen

Komisch, ich habe das in meinem Beitrag geändert, bevor ich Ihren Beitrag gesehen habe. Hochgevotet, weil Vögel einer Feder über denselben Link stolpern :)

4voto

Auf geschützte Mitglieder kann nur von Nachkommen der Klasse und von Code im selben Modul zugegriffen werden. Auf private Mitglieder kann nur von der Klasse, in der sie deklariert sind, und von Code im selben Modul zugegriffen werden.

Natürlich werfen die Funktionen der Freunde dies aus dem Fenster, aber was soll's.

4voto

PhilGriffin Punkte 638

Private Mitglieder sind nur innerhalb der Klasse zugänglich, geschützte Mitglieder sind in der Klasse und in abgeleiteten Klassen zugänglich. Dies ist ein Merkmal der Vererbung in OO-Sprachen.

In C++ kann es private, geschützte und öffentliche Vererbung geben, die bestimmt, worauf abgeleitete Klassen in der Vererbungshierarchie zugreifen können. In C# gibt es zum Beispiel nur öffentliche Vererbung.

3voto

Johan K. Rhodes Punkte 59

privat \= nur für das Mutterschiff (Basisklasse) zugänglich (d.h. nur mein Elternteil kann in das Schlafzimmer meiner Eltern gehen)

geschützt \= erreichbar über das Mutterschiff (Basisklasse), und ihre Töchter (d.h. nur mein Elternteil kann das Schlafzimmer meiner Eltern betreten, aber ich habe meinem Sohn/ meiner Tochter die Erlaubnis gegeben, das Schlafzimmer meiner Eltern zu betreten)

öffentlich \= zugänglich für Mutterschiff (Basisklasse), Tochter und alle anderen (d.h. nur mein Elternteil kann in das Schlafzimmer meiner Eltern gehen, aber es ist eine Hausparty - mi casa su casa)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X