guter Programmierstil
-
Hey Leute,
ich habe eine Frage zur Codefragmentierung bzgl. der OO-Programmierung in C++ und zwar welche Möglichkeit wird allgemein bei der Erstellung von Klassen als schönste betrachtet:
Man deklariert die Klasse in einem Header (d.h. man gibt die Klasse an, bei den Methoden gibt man jedoch nur die Prototypen an) und definiert die Methoden in einer gleichnamigen .cpp Datei
Man definiert die Funktionen direkt in einer Klasse und packt alles in eine Header Datei
Man definiert die Funktionen direkt in einer Klasse und packt alles in eine .cpp Datei
eine andere Möglichkeit
Vielen Dank im Voraus und viele Grüße
-
1.) Ja
2.) Nein
3.) Wie meinst du das?
4.) Klar, da das Problem als auch die Loesung manchmal andere Wege erfordern.
-
- Klassen, die nur lokal in einer Compiler Unit verwendet werden landen nie bei mir in einem Header.
- Nach Möglichkeit versuche ich die Anzahl der Klassen in Headern (die Anzahl der Header selbst) möglichst gering zu halten. Dazu benüze ich auch Forward Deklarationen.
- Getter Setter landen oft im Header. Größere Funktionen (wenn es keine templates sind) landen in der cpp Datei. Die Header-Datei und die Klassen darin sollten so übersichtlich wie möglich sen. Zuviel Code darin stört (mich) oft nur.PS: 3. verstehe ich auch nicht.
-
Danke für eure Antworten
3. war so gemeint:
Angenommen ich definiere alle Methoden direkt in der Klasse, sollte man die Klasse dann als .cpp oder .h abspeichern?
Gruß
-
Angenommen ich definiere alle Methoden direkt in der Klasse, sollte man die Klasse dann als .cpp oder .h abspeichern?
Eher unueblich, C++ ist nicht Java. Wenn die Klasse in anderen Uebersetzungseinheiten benutzt wird, "muss" sie in einen Header.
PS: Weniger Leerzeilen sind mehr.
-
Gast31415 schrieb:
Angenommen ich definiere alle Methoden direkt in der Klasse, sollte man die Klasse dann als .cpp oder .h abspeichern?
Methoden kann man auch inline in der h-Datei definieren, aber dabei sollte es sich möglichst nur um kurze Methoden handeln:
[cpp] class Test { public: int getWert(); private: int m_Wert; }; inline int Test::getWert() { return m_Wert; } [/cpp]