it-swarm.com.de

Private C++ - Strukturen

Ich habe gelesen, dass die Hauptunterschiede zwischen Klassen und Strukturen (abgesehen von Funktionen) darin bestehen, dass Klassenmitglieder standardmäßig privat sind, während Strukturmitglieder öffentlich sind.

Das bedeutet, dass Strukturmitglieder privat sein können. Meine Frage ist: Können Sie private Strukturmitglieder haben? Und wenn Sie können, was ist der Zweck, private Mitglieder zu verwenden? Wie würdest du überhaupt auf sie zugreifen?

15
Dasaru

Ja, Strukturen können über private Mitglieder verfügen. Sie müssen lediglich den Zugriffsbezeichner verwenden.

struct Mystruct
{
    private:
       m_data;

};

Der einzige Unterschied zwischen Struktur und Klasse ist:

  • der Zugriffsbezeichner ist standardmäßig auf private für Klassen und öffentliche für Struktur festgelegt
  • die Vererbung ist für Klassen standardmäßig privat und für Struktur öffentlich 

Wie können Sie darauf zugreifen?
Genauso wie Sie auf private Mitglieder einer Klasse zugreifen. Das heißt: Sie können nur innerhalb der Strukturelementfunktionen und nicht in abgeleiteten Strukturen usw. aufgerufen werden.

23
Alok Save

Die only Differenz zwischen struct und class ist der Standardzugriff (mit Ausnahme einiger seltsamer Vorlagensituationen, siehe Alfs Kommentare unten). Das heißt, Sie können auf private Mitglieder genauso zugreifen wie in einer Klasse:

struct foo {
  int get_X() { return x; }
  void set_X(int x_) { x = x_; }
private:
  int x;
};

Ob Sie nun struct oder class verwenden, ist eine reine Stilfrage. Ich neige dazu, struct zu verwenden, wenn alle Mitglieder öffentlich sind (z. B. wenn es sich um eine functor-Klasse ohne Mitgliedervariablen und nur öffentliche Funktionen handelt).

3
bdonlan

Dies macht es nützlich, dass Sie auch den Friend-Schlüssel Word in Strukturen verwenden können. Private Mitglieder können also nur von diesen bestimmten Funktionen oder Klassen verwendet werden und können nicht geändert werden. Auf diese Weise kann der Benutzer diese Abschnitte nicht selbst ändern. Sie werden nicht einmal in den Auto-Fill-Funktionen angezeigt, zumindest im Visual Studio. 

0
Peter Addy