Betrachten Sie folgendes:Kann man Teile der Vererbungshierarchie in C++ verstecken?
Klasse B
erbt öffentlich von Klasse A
. Beide sind in einer Bibliothek enthalten und ich kann sie nicht ändern.
Ich möchte eine Klasse implementieren Foo
, die von B
leitet, aber ich möchte den Benutzern von Foo
erlauben nur öffentliche Funktionen von A
und Foo
(nicht von B
) zu verwenden. Für sie ist es nicht relevant, dass Foo
von B
erbt, das ist im Prinzip ein Implementierungsdetail, das ich nicht vermeiden kann.
Also, im Prinzip möchte ich Foo
erben öffentlich von A
, aber privat von B
.
Gibt es ein Konstrukt in C++, das mir erlauben würde, dies zu tun?
Ich muss hinzufügen, dass die virtuelle Vererbung keine Option ist, da A
, in meinem Fall, von QObject
abgeleitet ist (siehe Is it safe to use *virtual* multiple inheritance if QObject is being derived from DIRECTLY?).
(NB: Für Interessenten: in meinem Fall ist A
QWindow
und B
ist Qt3DExtras::Qt3DWindow
)
tut 'struct foo: A {B b; } 'Arbeit? – Danh
Dokumentieren Sie einfach nicht, dass Ihre Klasse von B abgeleitet ist. Sagen Sie, dass sie von A abgeleitet ist. Dies ist keine Methode, um einen bestimmten Benutzer, der Zugriff auf B haben will, zu stoppen, aber dann ist nichts anderes mehr. –