Headerdatein ?
-
Das heißt: Ich darf nur deklarationen von Variablen oder Konstanten in eine Headerdatei schreiben und die Funktionen in eine Cpp Datei?
Bin ich da richtig?
Wenn nicht bitte ein Beispiel!
-
Du schreibst Deklerationen von Variablen oder Prototypen Funktionen in die Headerdatei:
//Test.h void Test();
Und in die .cpp Datei schreibst du dann die Definition:
//Test.cpp void Test() { //... }
Die Headerdatei musst du dann dort inkludieren wo du die Funktion benutzt
-
Beispiel:
Header.h
#ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED class Blub { public: Blub(); ~Blub(); void foo(); }; void foobar(int bar); #endif // HEADER_H_INCLUDED
Header.cpp
#include "header.h" Blub::Blub() { } Blub::~Blub() { } void Blub::foo() { foobar(12); } void foobar(int bar) { // do something }
MfG eViLiSSiMo
-
Mal eine Verständlichkeitsfrage: Gibt es eine standartisierte Vorgabe für:
#ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED ... #endif // HEADER_H_INCLUDED
weil ich seh das mal so,mal seh ich das ohne _INCLUDED hinten dran,mal mit einem _ noch davor,ich weiß gar nicht was ich nutzen soll.
MfG
meissner
-
das mit dem _ davor ist vom Standard her verboten. Ansonsten ist das egal, wie du das machst. Du musst eben nur zwei Bezeichner finden, die sonst nicht in dem Programm benutzt werden. Der Name des Headers ist da ja ideal.
-
Eine Alternativ ist ein Bezeichner der gerade in deinem Program gebraucht wird. Zum beispiel der Name einer Funktion oder Klasse:
#ifndef Foo #define Foo Foo class Foo { }; #endif
-
Wenn du einen Compiler von Microsoft verwendest (und du deinen Code voraussichtlich nicht portieren willst), dann kannst du auch einfach den Präprozessorbefehl "#pragma once" verwenden.
Bsp.:
//Foo.h #pragma once // Foo.h wird in einem Kompiliervorgang nur einmal inkludiert class Foo { public: Foo(); privat: int foo; };
-
Jetzt habe ich es verstanden, aber was sind Prototypen ider C++ Programmierung?
-
Prototypen dienen in C++ dazu,um dem Compiler Funktionen bekannt zu machen,die später implementiert und benutzt werden. Vorteil der ganzen Sache ist,das du innerhalb einer Funktion auch alle anderen Funktionen benutzten kannst, denn so etwas geht nicht:
void foo() { foo1(); //nicht bekannt,da erst später definiert } void foo1() { ... }
Außer du machst folgendes:
void foo(); void foo1(); void foo() { foo1(); //Jetzt kennt der Compiler die Funktion ... } void foo1() { ... }
In den Prototypen müssen auch die Parametertypen angegeben werden. Der Prototyp sieht genauso aus wie der Funktionskopf, nur musst du keine Bezeichner für die Parameter vergeben.
Bsp:
int foo(int); //Prototyp ... int foo(int bezeichner) { ... }
Außerdem sollten ja die ganzen Prototypen in der Header stehen,damit die Funktionen in anderen Datein bekannt gemacht werden,wenn du dann später einmal in die Header Datei reinschaust,dann ist das ganze auch übersichtlicher,als wenn da alle Funktionen implementiert stehen.
So mehr fällt mir nicht ein.
MfG
meissner
-
Danke schön!!!
Besucht meine Page und tragt euch ins Gästebuch ein!!!!