Angenommen, wir zwei Klassen haben:Wie kann eine Klasse nur auf bestimmte private Mitglieder einer anderen Klasse zugreifen?
class Base
{
private:
int x;
public:
void f();
};
class Foo
{
// some variables and methods
};
Jetzt kann jeder Base::f()
nennen, aber ich möchte nur Foo
der Lage sein, dies zu tun.
Um diesen Effekt zu erreichen, können wir Base::f()
privat machen und Foo
als Freund erklären:
class Base
{
private:
int x;
void f();
friend Foo;
};
Das Problem bei diesem Ansatz ist, dass Foo
den Zugang zu beiden Base::f()
hat und Base::x
(und sogar zu andere private Mitglieder von Base
). Aber ich möchte Foo
Zugriff nur auf Base::f()
haben.
Gibt es eine Möglichkeit für eine Klasse (oder eine Funktion), nur bestimmten privaten Mitgliedern einer anderen Klasse Zugriff zu gewähren? Oder vielleicht könnte jemand eine bessere Herangehensweise an mein Problem vorschlagen?
EDIT:
Ich werde versuchen, die Zugriffsbeschränkung muss ich angeben. Erstens ist Base
eine Schnittstelle in einer Bibliothek (es ist tatsächlich eine abstrakte Klasse). Der Benutzer verwendet nur die von Base
abgeleiteten Klassen. Base::f()
wird nur von Foo
aufgerufen, die eine andere Klasse in der Bibliothek ist. Es ist wichtig, Base::f()
vom Benutzer zu verstecken, weil nur Foo
weiß, wann es aufgerufen werden soll. Zur gleichen Zeit sollte Foo
die anderen Mitglieder von Base
nicht durcheinander bringen.
Sie könnten 'f()' geschützt machen und geschützte Vererbung verwenden, denke ich. – chris
Aber 'Foo' ist nicht von' Base' abgeleitet. – miloszmaki
Es war nur ein Gedanke. Sie müssten es ableiten. Nachdem ich die 'BaseData'-Antwort gesehen hatte, ging ich damit jedoch weiter. – chris