Ich versuche, einige Mitglieder der Basisklasse über seinen Konstruktor zu initialisieren, aber ich scheitere. Im folgenden Code scheint es, dass das abgeleitete Klassenelement message
vor dem Aufruf des Basiskonstruktors nicht initialisiert wird. Ein Workaround wäre Child(string messg_arg) : message(messg_arg), Parent(messg_arg)
, aber gibt es eine Möglichkeit, dies zu vermeiden?Reihenfolge der Initialisierung in abgeleiteten Klassen
class Parent
{
protected:
string something;
Parent(string something_arg) : something(something_arg)
{}
}
class Child : public Parent
{
public:
string message;
Child(string messg_arg) : message(messg_arg), Parent(message)
{}
}
Die Reihenfolge der Initialisierung wird durch die Reihenfolge bestimmt, in der die Mitglieder angezeigt werden, und Basisklassen erscheinen vor Mitgliedern. Mit diesem Weg, was willst du eigentlich erreichen? Die "Nachricht" in der "Kind" -Klasse schattiert die Nachricht in der "Eltern" -Klasse. – MicroVirus
Ich habe versucht, ein Objekt in der abgeleiteten Klasse zu konstruieren und es durch Verweis auf die Basis übergeben. Jedenfalls werde ich das Design überdenken. – user4168715
Anstatt die Basis an die Basis zu übergeben, muss die Basis eine Funktion definieren, die das Zeug von ihren Erben erhält und die Erben zwingt, sie zu implementieren, indem sie die Funktion rein virtuell macht. 'virtual Stuff & getStuff() = 0;' Es gibt ein paar mögliche Leistungsüberlegungen hier, aber die meiste Zeit ist dies eine einfache und sichere Möglichkeit, um zu bekommen, was Sie wollen. – user4581301