Wie verwenden Sie den Nicht-Default-Konstruktor für ein Mitglied?
-
21-09-2019 - |
Frage
Ich habe zwei Klassen
class a {
public:
a(int i);
};
class b {
public:
b(); //Gives me an error here, because it tries to find constructor a::a()
a aInstance;
}
Wie kann ich es so bekommen, dass Ainstance mit einem (int i) instanziiert wird, anstatt zu versuchen, nach einem Standardkonstruktor zu suchen? Grundsätzlich möchte ich die Aufruf des A -Konstruktors von A innerhalb von Bs Konstruktor steuern.
Lösung
Sie müssen eine (int) explizit in der Liste der Konstruktor -Initialisierer aufrufen:
b() : aInstance(3) {}
Wobei 3 der Anfangswert ist, den Sie verwenden möchten. Obwohl es irgendetwas int sein könnte. In den Kommentaren für wichtige Notizen zu Bestellung und anderen Vorbehalten finden Sie.
Andere Tipps
Verwenden Sie eine Initialisierungsliste:
b::b() : aInstance(1) {}
Verwenden Sie einfach einen Konstruktor, der so definiert ist:
class b {
public:
b()
: aInstance(5)
{}
a aInstance;
};
Ich denke, Sie sollten einen Zeiger auf 'a' verwenden:
class b {
public:
b() : aInstance(new a(5)) {}
a *aInstance;
};
Auf diese Weise haben Sie das Verhalten definiert. Natürlich müssen Sie im Destruktor befreien.