C++ - Klassen-Initialisierungs-Liste Beispiel
Werde ich das Kapitel 17 in der neuen Stroustrup Buch und ich bin verwirrt durch die Initialisierung einer Klasse mit einer Initialisierungs-Liste.
Beispiel:
in .hpp:
class A
{
public:
A() : _plantName(std::string s), _growTimeMinutes(int 1);
virtual ~A();
private:
std::string _plantName;
int _growTimeMinutes;
};
in .cpp:
A::A() : _plantName(std::string s), _growTimeMinutes(int i)
{
}
oder ist es in .cpp:
A::A(std::string s, int i) : _plantName(std::string s), _growTimeMinutes(int i)
{
}
und ruft:
A a {"Carrot", 10};
Lernte ich c++ zurück im Jahr 1998 und haben nur programmiert, in der es auf und ab über die Jahre, bis vor kurzem. Wie lange ist es her, dass Sie diese Sachen ändern? Ich weiß, ich könnte es immer noch tun, dass die ältere Methode, aber ich möchte wirklich etwas neues zu lernen!
Diese waren schon lange vor C++11. Die brace-Initialisierung nicht.
Kannst du bitte Bearbeiten Sie diese und versuchen zu klären, was Ihre eigentliche Frage ist? Die verschiedenen Konstruktor-Implementierungen und-Deklarationen werden alle versuchen zu initialisieren Mitglieder, die nicht existieren, so ist es schwer zu sagen, welche Teil, den Sie gerade Fragen.
Vielleicht hilft: stackoverflow.com/questions/1711990/...
Brace-Initialisierung wurde in C++03, aber nur auf Strukturen und Klassen, die entsprechen, um die Plain Old Data (POD) definition.
Ich war Art des Denkens, wie ich es gesagt habe. Ich könnte ja sagen, die einheitliche Initialisierung, aber dann ist die OP hätte keine Ahnung wovon ich Rede. Ich dachte es wäre eindeutig genug, da der POD-Regel kann nicht gelten hier.
Kannst du bitte Bearbeiten Sie diese und versuchen zu klären, was Ihre eigentliche Frage ist? Die verschiedenen Konstruktor-Implementierungen und-Deklarationen werden alle versuchen zu initialisieren Mitglieder, die nicht existieren, so ist es schwer zu sagen, welche Teil, den Sie gerade Fragen.
Vielleicht hilft: stackoverflow.com/questions/1711990/...
Brace-Initialisierung wurde in C++03, aber nur auf Strukturen und Klassen, die entsprechen, um die Plain Old Data (POD) definition.
Ich war Art des Denkens, wie ich es gesagt habe. Ich könnte ja sagen, die einheitliche Initialisierung, aber dann ist die OP hätte keine Ahnung wovon ich Rede. Ich dachte es wäre eindeutig genug, da der POD-Regel kann nicht gelten hier.
InformationsquelleAutor Jason | 2013-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst denke ich Initialisierungs-Listen sind nützlich, wenn Sie Umgang mit den ständigen Mitgliedern oder bei der übergabe von Objekten als Parameter, da Sie vermeiden, den Aufruf der Standard-Konstruktor dann die tatsächliche Zuordnung.
Schreiben Sie den folgenden code in die cpp-Datei : keine Notwendigkeit zum Neuschreiben der Parameter-Typen in der Initialisierungs-Liste.
Deine h-Datei sollte sein :
Und erstellen Sie ein neues Objekt wie das
double d2 {2.3};
kann man nicht tun, dass für benutzerdefinierte Typen? also so, wie Sie notiert es oben?Ich wusste nicht, dass notation : es scheint, können Sie schreiben beide Formen und es wird, so entspricht in den meisten Fällen. Sie können Lesen wollen diesen thread.
so, jetzt was ich Lerne, ist, dass seit _plantName und _growTimeMinutes Teil einer anderen Klasse, die Eine() erweitert, die ich brauche, um über diese denken anders und doch
InformationsquelleAutor Silouane Gerin
Sollte es
beispielsweise
angenommen, dass die Variablen _plantName und _growTimeMinutes deklariert sind, innerhalb der Klasse A oder einer Ihrer Oberklassen. s und i sind die Konstruktor-Parameter der Klasse A, die wird bei der Initialisierung dann rufen Sie den string-Konstruktor für _plantName mit argument s und int-Konstruktor für _growTimeMinutes mit dem argument ich, also Initialisierung der beiden Variablen.
Initialisierung Listen sind erforderlich, vor allem bei der Initialisierung von const-Referenzen. Die Zuordnung innerhalb der Konstruktor nicht funktionieren würde.
Hoffe ich konnte helfen
und ist der header korrekt ist, da ich gelesen habe, dass Sie nicht setzen es in Ihrem Kopf - (stackoverflow.com/questions/7665021/...), aber ich sehe andere Beispiele, die haben es in eine Kopfzeile (geeksforgeeks.org/when-do-we-use-initializer-list-in-c)
Du hast absolut Recht. Es ist nicht eine eigentliche Konstruktor in einem technischen Sinn, da die int ist ein integraler Datentyp. Ich benutzte den Begriff für die Klärung in diesem Fall.
Sie steckte es in die definition.
Danke. Also member-Initialisierung ist wirklich vorteilhaft, da das Objekt ic erstellt, nach der Initialisierung, wo, wie ist nicht der Fall mit den Zuordnung. So in der Theorie kann ich-pass-Funktionen und das arbeiten ist dont zuerst, dann das Objekt erstellt, mit der Arbeit fertig. Wie es scheint, könnte eine gewisse Geschwindigkeit haben Vorteile durch diese
InformationsquelleAutor voidpointercast