Klassen für andere Klassen in C ++ öffentlich machen

7

Wenn ich zwei Klassen habe, zum Beispiel wie folgt:

%Vor%

Wenn ich die Klasse A public zur Klasse B machen möchte, mache ich einfach die Mitglieder der Klasse A public oder ich kann einfach public class A {...} ?

verwenden

Gibt es eine Möglichkeit, der Klasse B beispielsweise zu sagen, dass nur die Klasse A für Sie öffentlich ist? Mit anderen Worten: Kann ich öffentliche Klassen für A protected oder privat für andere freigeben? Oder ist dies nur eine Frage der Ableitung einer Klasse (Vererbung)?

Danke.

    
Simplicity 25.01.2011, 10:55
quelle

3 Antworten

15

Es besteht ein wesentlicher Unterschied zwischen der Veröffentlichung der Klasse und der Veröffentlichung ihrer Inhalte.

Wenn Sie Ihre Klasse in einer Include-Datei (.h-Datei) definieren, machen Sie Ihre Klasse öffentlich. Jede andere Quelldatei, die diese Include-Datei enthält, weiß über diese Klasse Bescheid und kann z. habe einen Zeiger darauf.

Die einzige Möglichkeit, eine Klasse als privat zu definieren, ist ihre Definition in einer Quelldatei (.cpp).

Auch wenn Sie eine Klasse öffentlich machen, müssen Sie den Inhalt Ihrer Klasse nicht unbedingt veröffentlichen. Das folgende Beispiel ist extrem:

%Vor%

Wenn diese Definition in eine Include-Datei geschrieben wird, kann jede andere Quelle auf diese Klasse verweisen (einen Zeiger darauf haben), aber da alle Methoden in der Klasse privat sind, kann keine andere Quelle sie konstruieren, zerstören, setzen sein Wert oder erhalte seinen Wert.

Sie machen den Inhalt einer Klasse öffentlich, indem Sie Methoden aus dem public-Teil der Klassendefinition wie folgt einfügen:

%Vor%

Nun kann jeder Instanzen dieser Klasse konstruieren und zerstören und kann sogar den Wert erhalten. Das Festlegen des Werts ist jedoch nicht öffentlich, daher kann niemand den Wert festlegen (mit Ausnahme der Klasse selbst).

Wenn Sie die Klasse nur für eine andere Klasse Ihrer Anwendung, nicht jedoch für die vollständige Anwendung freigeben möchten, sollten Sie diese Klasse als Freund deklarieren, z. B .:

%Vor%

Nun kann SomeOtherClass auf alle privaten Methoden von MyClass zugreifen, so dass setValue aufgerufen werden kann, um den Wert von MyClass festzulegen. Alle anderen Klassen sind immer noch auf die öffentlichen Methoden beschränkt.

Leider gibt es in C ++ keine Möglichkeit, nur einen Teil Ihrer Klasse für eine begrenzte Anzahl anderer Klassen öffentlich zugänglich zu machen. Wenn Sie also eine andere Klasse zu einem Freund machen, können Sie auf alle privaten Methoden zugreifen. Begrenzen Sie daher die Anzahl der Freunde.

    
Patrick 25.01.2011, 11:12
quelle
3

Sie können Freundschaft benutzen.

%Vor%     
Puppy 25.01.2011 10:57
quelle
3

Wenn B eine starke Abhängigkeit von A hat, schlage ich vor, dass Sie eine verschachtelte Klasse verwenden. Glücklicherweise kann die geschachtelte Klasse geschützt oder privat sein.

%Vor%     
BatchyX 25.01.2011 11:40
quelle

Tags und Links