C++ code im header richtig?

Gast #1102682
Lesenswert?

hey leute,

bin in managed C++ programmierung gestossen worden. also arbeite ich zur 
zeit mit Visual Studio.

meine frage: wie die konvention bei C++, darf man code in den header 
schreiben ?

folgendes problem: ich habe ein startformular (Bsp. Form1). laut VS ist 
Form1 eine header datei. allerding werde ja hier die Objekte erstellt , 
die in der Form1 enthalten sind (wie TextBox & Co.). ich muss mit diesen 
Objekten arbeiten, also bleibt nichts anderes übrig , wie in den header 
von Form1 zu schreiben oder?


MFG MaXXX
Persönliche Seite #1102781
Lesenswert?

In C++ ist es durchaus gebräuchlich, triviale Implementierungen von 
Funktionen in der Headerdatei anzulegen. Bei Code mit inline-Attribut 
muss das sogar so gemacht werden.

Außer in diesem Fall ist es aber nicht erforderlich, das von C her 
gewohnte Schema Deklaration -> .h / Definition -> .c kann hier 
beibehalten werden.

Bei der Definition von Memberfunktionen einer Klasse muss der 
Klassenname mit :: als Separator vor den Funktionsnamen gesetzt werden.

Ist in einer Klasse bla eine Funktion foo deklariert, wie 
beispielsweise hier:
1
class bla
2
{
3
  // ...
4
  int foo();
5
  // ...
6
};

dann sieht die Definition so aus:
1
int bla::foo()
2
{
3
  // ...
4
}

Als Dateinamensschema hat sich die Verwendung je eines Paares 
.cpp/.h-Dateien pro Klasse mit dem Klassennamen als Dateinamen als 
praktikabel erwiesen.

Obiges Beispiel bestünde also aus bla.h und bla.cpp

Microsoft verwendet in seinen C++-Varianten die präfixorientierte 
ungarische Notation und hängt ein großes C vor den Klassennamen. Das ist 
dann nicht Dateinamensbestandteil.
Eine Klasse CFoo wird dann in Foo.h / Foo.cpp abgelegt.
Gast #1103228
Lesenswert?

> Microsoft verwendet in seinen C++-Varianten die präfixorientierte
> ungarische Notation und hängt ein großes C vor den Klassennamen. Das ist
> dann nicht Dateinamensbestandteil.

Das trifft vor allem auf alten Code zu, der mit der MFC arbeitet. In 
moderneren Versionen verwendet Microsoft bei Klassennamen kein C-Präfix 
mehr.
Gast #1103703
Lesenswert?

also ist es ok in der datei Form1.h so was rein zuschreiben ?
z.B. für ein ActionListener eines buttons

ActionListener button{
   String^ info;

   info = this->textbox->text;

   ... code...

   mehr code ...

   this->textbox2->text("bla")

   ... noch mehr code...


}

ist natülich pseudocode ^^


mfg
#1103905
Lesenswert?

>> Nimm C#, wirste glücklicher und auch glücklich.
>> Ist easy und solche Fragen stellen sich gar nicht erst.

Ja, und weil das so ist programmiert auch kaum noch einer in C/C++ :-) - 
dazu empfehle ich "Enough Rope to Shoot Yourself in the Foot: Rules for 
C and C++ Programming (Unix/C)" von Allen Holub.

Merkwürdigerweise ist C/C++ Code oftmals weniger fehlerbehaftet als ein 
C#- oder Java-Code, weil C-Programmierer wegen dieser "Mankos" gehalten 
sind, genauer über ihren Code nachzudenken - und sich nicht auf 
GarbageCollections und ähnliche Gadgets verlassen können

Aber zum Thema:
In unserer Softwareabteilung galt die Meinung, dass die H-Datei eine 
gewisse öffentliche Funktion hat, schliesslich wird diese per #include 
woanders eingebunden. Daher sollte man dort keinen Code einbauen, den 
man nicht auch bewusst unter diesem Blickwinkel haben will.
Das ist nicht wirklich eine technische Entscheidung sondern eher eine 
Frage der Einstellung zum Code. Genauso gibt es immer Leute, die sich 
beklagen, dass man H-Dateien nicht immer fröhlich und ohne Nebeneffekte 
bunt durcheinander includen darf - bei einem ordentlichen Design hat man 
diese Probleme eigentlich nicht
Gast #1107288
Lesenswert?

danke @all.

der wechsel zur C# ist schwer, da der code schon ordentlich laaaaaang 
ist :)

also ich bin auch nicht glücklich mit code im header, aber hier werde 
viel objekte im header automatisch von MS erzeugt, müsste ja den 
gaaaaaaaanzen haufen übergeben, also schreibe ich lieber weiter in den 
header ^^


mfg
Gast #1107302
Lesenswert?

Code im Header wird zum Beispiel auch dann problematisch, wenn es um 
Bibliotheken geht - dann landen Teile des Bibliothekscodes in der 
Applikation, andere Teile landen in der Bibliothek selbst. Wird die 
Bibliothek ausgetauscht ohne die Applikation neu zu uebersetzen, passen 
beide Teile mitunter nicht mehr zusammen, ohne, dass das bemerkt wird. 
Hoert sich bescheuert an, ist es auch, passiert aber oft genug.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren