Forum: PC-Programmierung C++ code im header richtig?


von MaXXX (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von MaXXX (Gast)


Lesenswert?

danke für die schnelle antwort

mfg

von Chris (Gast)


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.

von MaXXX (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist kein C++, sondern eine von Microsoft erfundene Perversion namens 
"Managed C++".

Wenn das von Dir erwähnte Codeschnipselchen innerhalb einer 
Klassendeklaration steht, dann kann man das tatsächlich so machen.

Ob das jetzt übersichtlicher ist, ist hingegen eine ganz andere 
Angelegenheit.

von Der Unbekannte #2 (Gast)


Lesenswert?

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

von Matthias D. (marvin42)


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

von MaXXX (Gast)


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

von pst (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.