Zunächst einmal, ich bin mir nicht ganz sicher, ob ich Ihren letzten Satz verstehe.
Does ++ C für eine dritte Klasse von Z nach Unterklasse Y in einer solchen Art und Weise ermöglichen, dass Implementierung von x1 des Y und y privat zur Verfügung zu ihm sind, während die nur Außenwelt es X öffentlich vererben sieht, dh mit nur einer einzigen öffentlichen Methode x2?
Wenn Z
öffentlich von X
erbt, dann beide x1
und x2
zur Verfügung: obwohl die Zugänglichkeit von x2
kann in Z
geändert werden, nichts hindert die Außenwelt von einem Z
durch einen X
Zeiger manipulieren und rufen Sie x2
.
Dass gesagt wird, könnte man genauso gut haben Z
erben privat von Y
und öffentlich von X
obwohl, wie von Johannes wies darauf hin, Sie in virtuelle Vererbung aussehen sollte als Z
so zweimal von X
erben.
Je nach Bedarf, können Sie auch in die decorator pattern aussehen wollen (vielleicht ist es völlig unabhängig, aber aus irgendeinem Grund, ich fühle mich Ihre Frage durch das Lesen, dass es ist, was Sie erreichen wollen):
class X
{
public:
virtual void x1();
virtual void x2();
};
class Y : public X
{
public:
virtual void y();
virtual void x1();
};
class Z : public X
{
public:
explicit Z(X *x) : x_(x) {}
virtual void x1() { x_->x1(); }
virtual void x2() { x_->x2(); }
private:
X *x_;
};
int main()
{
Y y;
Z z(&y);
}
In diesem schnellen und schmutzigen Codebeispiel Z
ist einX
(öffentliche Vererbung), doch ist Y
Implementierung wiederverwendet.
Wenn Sie auch "faule Helfer" möchten, um Ihnen zu helfen, würde ich diese Frage im Code so weit wie möglich schreiben, dann darauf hinweisen, wo es nicht funktioniert, und dann die Frage auf eine Zeile reduzieren und fragen, wie mach diese Arbeit. – AudioDroid