Standardmäßige Best-Practice-Werte für Mitglieder
Ist es gute Praxis beim schreiben von C++11 code, um die Standardwerte für die Schüler, die in der header-Datei der Klasse?
Oder ist es besser, dies zu tun in den Konstruktor der Klasse?
EDIT:
Ich meine:
foo.h:
#include <string>
using std::string;
class Foo{
private:
string greet = "hello";
public:
Foo();
};
VS
foo.cpp (natürlich mit den erforderlichen header-Datei, aber ohne die in-class initialization):
Foo::Foo(){
greet = "hello";
}
Welches ist besser und warum?
InformationsquelleAutor der Frage Paul | 2012-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ein Schüler immer initialisiert mit dem gleichen Startwert, dann sollten Sie die Initialisierung inline, um so überschneidungen zu vermeiden. Wenn der erste Wert ist abhängig von der Konstruktor, dann legen Sie Sie in den Konstruktor-Initialisierungsliste. (Und keine Zuordnung in der Weise, die Sie getan haben.)
Beispiel:
In diesem hypothetischen Beispiel, der Mitglied
done
ist immer erforderlich, zu beginnen, wiefalse
so ist es am besten zu schreiben, die Initialisierung inline. Die anderen zwei Mitglieder,qty
undp
können initialisiert werden anders in jeder der drei verschiedene Konstruktoren, so werden Sie initialisiert, die innerhalb der Konstrukteurs-Initialisierer-Listen.Ein curiosum: Beachten Sie, dass die Bereitstellung von inline-Initialisierer wird verhindert, dass Ihre Klasse von einer trivialen Standardkonstruktor.
InformationsquelleAutor der Antwort Kerrek SB
Es hängt davon ab, ob Sie brauchen, um kompatibel zu bleiben mit älteren C++ - Compilern .Wenn Sie nicht mit C++11 haben Sie zum initialisieren die meisten Mitglieder (alle nicht-statischen) im Konstruktor.
Weiter viele Menschen befürworten explizit initialisieren jedes Mitglied, auch wenn dies bedeutet ausdrücklich den Aufruf der default-ctor.
In der Regel sollten Sie die Implementierungsdetails in einer cpp-Datei, die nicht in der header-Datei, also ein Beispiel wäre
In C++11 haben Sie mehr Möglichkeiten und in der Klasse member-Initialisierung wird sehr nützlich, vor allem, wenn Sie mehrere cors. Hier ist ein guter link für weitere Informationen: http://www.stroustrup.com/C++11FAQ.html#member-init
Nach Edit: Nach Ihren code, den Sie verwenden C++11. Meines Wissens gibt es nur wenige Informationen über gute Praxis in Bezug auf die neuen Möglichkeiten, aber IMHO In der Klasse member-Initialisierung sind sehr praktisch, um sich zu konzentrieren Initialisierung in einem Ort, der die Komplexität reduziert und die Eingabe
InformationsquelleAutor der Antwort Martin
Initialisieren im Header hat die wichtigsten Vorteile halten code mehr lokal und einfach zu verstehen. Es spart auch einiges an Tipparbeit.
Der größte Nachteil, meiner Meinung nach, ist die Notwendigkeit, mehr überschriften, erhalten Sie Zugriff auf Konstruktoren. Einfache vorwärts-Deklaration nicht ausreichen, so dass die Kompilierung länger dauern.
InformationsquelleAutor der Antwort Christopher Oezbek